Попытка закодировать изображение в base64 после изменения размера - PullRequest
2 голосов
/ 23 сентября 2011

В php я пытаюсь закодировать изображение в base64 после изменения размера.Когда я кодирую его напрямую без изменения размера, он работает нормально

$bitmapNode = $dom->createElement( "bitmap" );
$bitmapNode->appendChild( $dom->createTextNode(base64_encode(file_get_contents($url)))  );
$root->appendChild( $bitmapNode );

Но когда я пытаюсь изменить размер до кодирования, он больше не работает, и содержимое узла xml пусто.

$image = open_image($url);
if ($image === false) { die ('Unable to open image'); }
// Do the actual creation
$im2 = ImageCreateTrueColor($new_w, $new_h);
imagecopyResampled($im2, $image, 0, 0, 0, 0, 256, 256, imagesx($image), imagesy($image));
$bitmapNode = $dom->createElement( "bitmap" );
$bitmapNode->appendChild( $dom->createTextNode(base64_encode($im2)) );
$root->appendChild( $bitmapNode );

Есть ли что-то, что я делаю не так?

1 Ответ

2 голосов
/ 23 сентября 2011

$im2 - это просто дескриптор ресурса GD. это НЕ сами данные изображения. Чтобы захватить изображение с измененным размером, вам нужно сохранить его, а затем base64_encode, который сохранил данные:

imagecopyresample($im2 ....);
ob_start();
imagejpeg($im2, null);
$img = ob_get_clean();
$bitmapNode->appendChild($dom->createTextNode(base64_encode($img)));

Обратите внимание на использование буферизации вывода. Функции изображения GD не имеют метода для непосредственного возврата результирующих данных изображения. Вы можете писать только в файл или выводить прямо в браузер. Таким образом, использование функций ob позволяет вам захватывать данные, не прибегая к временному файлу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...