Вот как я получаю свое изображение:
$coverurl = 'https://api.someurl/api/v1/img/' . $somenumber . '/l'; //$iheaders contains: 'Content-type' => 'image/jpeg' $iresponse = wp_remote_get($coverurl, $iheaders); $img = $iresponse['body']; $testimg = base64_encode($img);
Когда i echo $ testimg с img-тегом, все работает нормально.
echo '<img class="attachment-shop_single size-shop_single wp-post-image" src="data:image/jpeg;base64,'.$testimg.'" width="274" />';
Поскольку мне нужно преобразовать строку в jpg и сохранить ее в моей папке uploads, я пытаюсь использовать imagecreatefromstring ().
$imgx = imagecreatefromstring($testimg); if ($imgx !== false) { header('Content-Type: image/jpeg'); imagejpeg($imgx); imagedestroy($imgx); } else { echo 'An error occurred.'; }
Но я никогда не добираюсь до момента сохранения чего-либо из-за следующего предупреждения:
Warning: imagecreatefromstring(): Data is not in a recognized format in /etc.
Когда i echo $ testimg, я получаю:
/9j/4AAQSkZJRgABAQAAAQABAAD ...Many number and characters.. Ggm2JUsEvfqnxAhGFDP/9k=
Что я должен сделать, чтобы сделать работу createimagefromstring? Нужно ли мне изменять строку $ testimg? Спасибо за ваш интерес. Тео
Метод imagecreatefromstring
не принимает строку с кодировкой base_64. Попробуйте это вместо этого:
$imgx = imagecreatefromstring($img); // Contents of $iresponse['body']
Вы можете увидеть это в верхнем комментарии на странице документации (см. Выше):
<?php $data = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl' . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr' . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r' . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg=='; $data = base64_decode($data); $im = imagecreatefromstring($data);
Посмотрев на код xttps: //codex.wordpress.org/Function_Reference/wp_insert_attachment , я нашел решение:
//get the image from internet $coverurl = 'https://api.someurl/api/v1/img/' . $somenumber . '/l'; $iresponse = wp_remote_get($coverurl, $iheaders); $img = $iresponse['body']; $directory = "/".date('Y')."/".date('m')."/"; $wp_upload_dir = wp_upload_dir(); //encode $img as with html image tag $imgdata = base64_encode($img); $filename = "gtb_". $isbnraw.".jpg"; $fileurl = "../wp-content/uploads".$directory.$filename; $filetype = wp_check_filetype( basename( $fileurl), null ); file_put_contents($fileurl, $img); $attachment = array( 'guid' => $wp_upload_dir['url'] . '/' . basename( $fileurl ), 'post_mime_type' => $filetype['type'], 'post_title' => preg_replace('/\.[^.]+$/', '', basename($fileurl)), 'post_content' => '', 'post_status' => 'inherit' ); $attach_id = wp_insert_attachment( $attachment, $fileurl, $post_id); require_once('../wp-admin/includes/image.php' ); // Generate the metadata for the attachment, and update the database record. $attach_data = wp_generate_attachment_metadata( $attach_id, $fileurl ); wp_update_attachment_metadata( $attach_id, $attach_data ); set_post_thumbnail( $post_id, $attach_id ); //add media_category wp_set_object_terms($attach_id, $mediacat, 'media_category');
Это преобразует base64 в jpg и импортирует в wordpress плюс прикрепляет его к сообщению / продукту. Кажется, это хорошо работает. Спасибо за ваш интерес. Тео