imagecreatefromstring (): данные не находятся в распознанном формате в

Вот как я получаю свое изображение:

$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 плюс прикрепляет его к сообщению / продукту. Кажется, это хорошо работает. Спасибо за ваш интерес. Тео