Задать вопрос
konnn
@konnn
Front-end developer

PHP binary -> image?

Привет всем!
Делаю добавление/сохранение аватарок на сайте!
Исходную картинку кроплю/cropping с помощью Cropper, всё отлично, скрипт возвращает canvas, потом делаю конверт в image
var $canvasImage = $(".cropper > img").cropper("getCroppedCanvas", {width: 170, height: 170});
var $img = new Image();
$img.src = $canvasImage.toDataURL("image/png");

далее аяксом (по нажатия кнопки "Сохранить") передаю бинарный код методом html в обработчик для сохранения
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKoAAACAAAAAXNSR0IArs
...
L65zz5n36pbJgMEyKpad5+99mrnHHOMb3xjzLG8f/72OLQAAAABJRU5ErkJggg==

всё хорошо, НО вот что у меня не получается, так это сделать ресайз и сохранить аватарки в папку (domain.ru/avatars)
перепробовал много вариантов, никак не получается
$targetdir = "http://domain.ru/avatars/"; // указываем путь к папке сохранения
$photoname = $user["userid"] . ".jpg"; // создаем имя для будущих картинок
$photodata = $_REQUEST["photodata"]; // сохраняем значение полученного бинарного кода картинки
$originalphoto = imagecreatefromstring($photodata);
			
// берем исходное разрешение
$original_width = imagesx($originalphoto);
$original_height = imagesy($originalphoto);
						
// создаем новые пустые картинки
$new170 = imagecreatetruecolor(170, 170);
$new90 = imagecreatetruecolor(90, 90);
$new60 = imagecreatetruecolor(60, 60);
$new30 = imagecreatetruecolor(30, 30);
			
// делаем ресайз картинки
imagecopyresampled($new170, $originalphoto, 0, 0, 0, 0, 170, 170, $original_width, $original_height);
imagecopyresampled($new90, $originalphoto, 0, 0, 0, 0, 90, 90, $original_width, $original_height);
imagecopyresampled($new60, $originalphoto, 0, 0, 0, 0, 60, 60, $original_width, $original_height);
imagecopyresampled($new30, $originalphoto, 0, 0, 0, 0, 30, 30, $original_width, $original_height);
			 
// сохраняем картинку с качеством - 60
ob_start();
imagejpeg($new170, $targetdir . "170-" . $photoname, 60);
imagejpeg($new90, $targetdir . "90-" . $photoname, 60);
imagejpeg($new60, $targetdir . "60-" . $photoname, 60);
imagejpeg($new30, $targetdir . "30-" . $photoname, 60);
$i = ob_get_clean(); 
			
imagedestroy($originalphoto);
imagedestroy($new170);
imagedestroy($new90);
imagedestroy($new60);
imagedestroy($new30);


Вот! Подскажите, что у меня не так? Спасибо!

PS
$photodata = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKoAAACAAAAAXNSR0IArs
...
L65zz5n36pbJgMEyKpad5+99mrnHHOMb3xjzLG8f/72OLQAAAABJRU5ErkJggg==";


PSS
это — до декодирования
6938a6804ee14d80ad1fc245e9752b98.png
это — после base64_decode()
9b9608b29dc74275b80c44d9a43fd688.png
  • Вопрос задан
  • 407 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
toxa82
@toxa82
Предполагаю что строку data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA.......gg== для imagecreatefromstring($photodata) все-таки нужно раскодировать из base64, убрав "data:image/png;base64,".
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы