Как получить в переменную изображение?
1.
T-S (24.07.2015 / 19:04)
Допустим есть $img_object = imagecreatefromstring($data);
его нужно обработать и переписать опять же в ПЕРЕМЕННУЮ $data.
Можно ли как то обойтись не сохраняя img_object в файл?
По поводу использования рессурсов и прочее блалабла я вкурсе. Просто не хочу лишний раз винт напрягать
2.
T-S (24.07.2015 / 19:23)
Как вариант нашел
<?php
ob_start();
imagejpeg($img_object);
$data = ob_get_clean();
Может есть какая то функция предназначена для этого?
3.
Reflesh (24.07.2015 / 20:01)
2.
T-S, $var = filge_get_contents() не ?
4.
T-S (24.07.2015 / 21:11)
3.
Reflesh, а лишний раз прочитать пост не?
Можно ли как то обойтись не сохраняя img_object в файл?
По поводу использования рессурсов и прочее блалабла я вкурсе. Просто не хочу лишний раз винт напрягать
5.
Антон (24.07.2015 / 22:48)
4.
T-S, memcache apc не?
6.
T-S (25.07.2015 / 00:25)
Ладно воспользовался буферизацией. Вопрос решен.
7.
Вантуз-мен (25.07.2015 / 00:40)
Как я понял нужно клонировать переменную с ресурсом, даже не знаю есть ли такая возможность
<?php
$src = "http://visavi.net/images/img/logo.png";
$image = imagecreatefromstring(file_get_contents($src));
$image2 = $image;
imagedestroy($image2);
var_dump($image === $image2);
$image и $image2 идентичны
поэтому самый явный вариант использовать результат функции file_get_contents($src) в твоем случае это $data
8.
Вантуз-мен (25.07.2015 / 00:55)
Вообще-то можно сделать вот так
<?php
$src = "http://visavi.net/images/img/logo.png";
$original = imagecreatefromstring(file_get_contents($src));
$copy = imagecreatetruecolor(imagesx($original), imagesy($original));
imagecopy($copy, $original, 0, 0, 0, 0, imagesx($original), imagesy($original));
imagedestroy($original);
var_dump($original, $copy);
resource(4, Unknown)
resource(5, gd)
но тут вряд ли получится сэкономить
9.
T-S (25.07.2015 / 13:17)
Совсем нет. Просто задача была в том что бы выдать в браузер изображене с ресурса который уже создан. Но не совсем в браузер. А передать его с контроллера в класс Response который уже это сделает.
Я как то затупил про буферизацию хотя она в остальных экшенах используется шаблонизатором.
Задача такова - имеется ссылка на удаленное изображение. Это изображение получается в виде строки обрезается и улетает в файловый кеш где потом будет вылавливатся через nginx. После выдать обрезанное изображение в браузер.
Я собственно сделал так и забыл уже
Добавлено через 03:10 сек.
<?php
//...
$data = curl_exec($ch);
$info = curl_getinfo($ch);
$error = curl_error($ch);
if ($info['http_code'] != 200 || $error || $info['content_type'] != 'image/jpeg') {
log(__FILE__ . ': '. __LINE__);
return $this->errorAction(Response::HTTP_INTERNAL_SERVER_ERROR);
}
$src_img = imagecreatefromstring($data);
$src_w = imagesx($src_img);
$src_h = imagesy($src_img);
// исходное соотношение
//$src_rate = $src_w / $src_h;
// необходимое соотношение картинки
$dst_rate = 1.777777777777778;
// ширина нового изображения
$dst_w = $src_w < 320 ? $src_w : 320;
// высота результата
$dst_h = round($dst_w / $dst_rate);
// новая высота оригинала
$src_h_new = $src_w / $dst_rate;
// отступы вырезаемой части
$src_indent = round(($src_h - $src_h_new) / 2);
$src_x = 0;
$src_y = $src_indent;
// отступы результата
$dst_x = 0;
$dst_y = 0;
$img_hq = imagecreatetruecolor($dst_w, $dst_h);
// копируем прямоугольник
imagecopyresampled($img_hq, $src_img, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h_new);
imagedestroy($src_img);
imagejpeg($img_hq, "{$path}_HQ.jpg");
10.
T-S (25.07.2015 / 13:21)
<?php
// create mq image
$mq_w = 128;
$mq_h = $mq_w/$dst_rate;
$img_mq = imagecreatetruecolor($mq_w, $mq_h);
imagecopyresampled($img_mq, $img_hq, 0, 0, 0, 0, $mq_w, $mq_h, $dst_w, $dst_h);
imagejpeg($img_mq, "{$path}_MQ.jpg");
$response = new Response();
switch($type) {
case 'HQ':
ob_start();
imagejpeg($img_hq);
$response->setContent(ob_get_clean());
$response->headers->set('Content-Type', image_type_to_mime_type(IMAGETYPE_JPEG));
$response->setStatusCode = 200;
break;
case 'MQ':
ob_start();
imagejpeg($img_mq);
$response->setContent(ob_get_clean());
$response->setStatusCode = 200;
$response->headers->set('Content-Type', image_type_to_mime_type(IMAGETYPE_JPEG));
break;
default:
return $this->errorAction(404);
}
imagedestroy($img_hq);
imagedestroy($img_mq);
return $response;
URL:
https://visavi.net/topics/42506