У меня есть несколько изображений – сохранено как Base64 Strings, и теперь я хочу изменить размеры этих изображений, чтобы получить их эскизы …
Лучше всего было бы использовать Javascript (Node-Server) для их изменения, но также можно было бы изменить их размер с помощью php.
заранее спасибо
Я согласен с методом от Jon Hanna : выполните анализ кода Base64, затем загрузите его в GD Image до Resample. Однако, чтобы вернуть его в качестве данных, это не так просто, как я. На php в GAE он должен будет включить буферизацию вывода , установив output_buffering = "On"
В файле php.ini.
Здесь я подробно объясню этот шаг.
Этот документ берется в качестве ссылки на Create Image Resource с помощью анализа парного кода Base64: http://php.net/manual/en/function.imagecreatefromstring.php
// Create image resource from Base64code $data64 = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl' . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr' . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r' . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg=='; $image = imagecreatefromstring(base64_decode($data64));
Это ресурс изображения, который можно напрямую добавить к функции Resample : http://php.net/manual/en/function.imagecopyresampled.php
// Resample $image_p = imagecreatetruecolor($new_w, $new_h); imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_w, $new_h, $org_w, $org_h);
Результатом является также ресурс изображения. Чтобы получить его как данные, нам нужна буферизация .
Посмотрите, как создать строку base64encoded из ресурса изображения
// Buffering ob_start(); imagepng($image_p); $data = ob_get_contents(); ob_end_clean();
Используя doc ниже, я установил ведро GCS в своем проекте как веб-сайт, чтобы я мог его хранить и отображать прямо: https://cloud.google.com/storage/docs/website-configuration#tips
//Store & Display $context = stream_context_create([ 'gs' =>[ 'acl'=> 'public-read', 'Content-Type' => 'image/jpeg', 'enable_cache' => true, 'enable_optimistic_cache' => true, 'read_cache_expiry_seconds' => 300, ] ]); file_put_contents("gs://mybucket/resample/image.jpeg", $data, false, $context); header("Location: http://img.ruphp.com/php/image.jpeg");
Лучше всего использовать PHPThumb в PHP.
Альтернативой является вызов ImageMagick, но вы предпочитаете:
Не знаю, как это сделать (или, ну, что угодно) в node.js, но PHP-бит вашего вопроса, безусловно, возможен. После синтаксического анализа Base64 загрузите его в изображение GD, а затем повторно произведите его.