2012-09-01 10 views
12

У меня есть несколько изображений - сохранить в виде Base64 строк, и теперь я хочу, чтобы изменить эти изображения, чтобы получить эскизы них ...Изменение размера изображения base64

Лучше будет использовать Javascript (Node-сервер), чтобы изменить их, но их можно было бы изменить и с помощью php.

Заранее спасибо

ответ

3

Понятия не имею, как это сделать (или хорошо, ничего) в Node.js, но PHP немного вашего вопроса, конечно, возможно. После разбора Base64 загрузите его в GD image, а затем resample.

http://php.net/manual/en/function.imagecopyresampled.php

+0

хорошо у меня нет отложенной записи права на моем сервере - как я могу связать эти большие пальцы с моим приложением node.js? Есть идеи? –

+0

Это подпадает под «Не знаю, как это сделать (или, ну, что угодно) в node.js« бит выше для меня, я боюсь. Надеюсь, у кого-то может быть хорошая идея. –

+0

ищет ответ на этот вопрос в течение 2 дней ... обычно это нормально работает с узлом, но в моем приложении-узле у меня нет прав на запись, тоже ... что отстой –

4

Лучше всего использовать PHPThumb в PHP.

Альтернатива для вызова ImageMagick однако вы предпочитаете:

+0

любая идея, как получить доступ к ним в моем приложении node.js после изменения размера с помощью php? –

9

Я согласен the method from Jon Hanna: У Синтаксический Base64code затем загрузить его Изображение GD перед Resample. Однако, чтобы вернуть его в качестве данных, это не так просто, как я. На php в GAE он должен будет enable output buffering, установив output_buffering = "On" в файле php.ini.

Здесь я объясняю шаг в деталях.

Этот документ принимается в качестве ссылки для создания изображения ресурсов с помощью разборе Base64code: 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); 

Результат - также ресурс изображения. Чтобы получить его как данные, нам нужно Буферизация.
См how to create a base64encoded string from image resource

// Buffering 
ob_start(); 
imagepng($image_p); 
$data = ob_get_contents(); 
ob_end_clean(); 

Использование док ниже я поставил ведро ГКС на my project как веб-сайт, поэтому я могу магазин & Дисплей это непосредственно: 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://mybucket/resample/image.jpeg"); 
+0

Стоит также отметить, что 'imagecopyresampled()' производит гораздо лучшее качество, чем 'imagecopyresized()', потому что он интерполирует. – garrettlynch

Смежные вопросы