Как получить в переменную изображение?

Печать / RSS
40

T

Пришелец
0
Допустим есть $img_object = imagecreatefromstring($data);
его нужно обработать и переписать опять же в ПЕРЕМЕННУЮ $data.
Можно ли как то обойтись не сохраняя img_object в файл?
По поводу использования рессурсов и прочее блалабла я вкурсе. Просто не хочу лишний раз винт напрягать
Изменил: T-S (24.07.2015 / 19:06)
T

Пришелец
0
Как вариант нашел
<?php
ob_start();
imagejpeg($img_object);
$data = ob_get_clean();
Может есть какая то функция предназначена для этого?
Изменил: T-S (24.07.2015 / 19:24)
R

Пришелец
0
2. T-S, $var = filge_get_contents() не ?
T

Пришелец
0
3. Reflesh, а лишний раз прочитать пост не?
Можно ли как то обойтись не сохраняя img_object в файл?
По поводу использования рессурсов и прочее блалабла я вкурсе. Просто не хочу лишний раз винт напрягать
Изменил: T-S (24.07.2015 / 21:11)

Оранжевые штаны
0
4. T-S, memcache apc не?
T

Пришелец
0
Ладно воспользовался буферизацией. Вопрос решен.

Господин ПЖ
0
Как я понял нужно клонировать переменную с ресурсом, даже не знаю есть ли такая возможность
<?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
Изменил: Вантуз-мен (25.07.2015 / 00:41)

Господин ПЖ
0
Вообще-то можно сделать вот так
<?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)

но тут вряд ли получится сэкономить
Изменил: Вантуз-мен (25.07.2015 / 00:56)
T

Пришелец
0
Совсем нет. Просто задача была в том что бы выдать в браузер изображене с ресурса который уже создан. Но не совсем в браузер. А передать его с контроллера в класс 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");

T

Пришелец
0
<?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;


Для выполнения действия необходимо авторизоваться!
Стикеры / Теги / Правила / Топ тем / Топ тем / Поиск