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

Печать RSS
421

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;


Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск