За последние 24 часа нас посетили 22973 программиста и 1221 робот. Сейчас ищут 732 программиста ...

Laravel и GD

Тема в разделе "Laravel", создана пользователем sharunm, 4 сен 2019.

  1. sharunm

    sharunm Активный пользователь

    С нами с:
    16 ноя 2014
    Сообщения:
    58
    Симпатии:
    0
    Здравствуйте, друзья,

    Возникла проблемка. В общем стоит задача позиции заказов сохранять в файлы изображений (где есть фото, цена, описание и т.п.). Задача следующая - выгружаем изображения в папку, архивируем и отдаем на скачивание.

    Начал осваивать GD на простых примерах. Сделал две функции. Одна создает изображение, другая сохраняет на диск.

    Взял пример из статей. Так вот, в браузере PNG выводится <img src="/testjpg">, сохраняется как PNG файл. Но переместить его в папку на диск не получается. imagepng не записывает на диск, почему-то. А imagejpeg и вовсе функция undefind.

    /testjpgout изображение отображает, а Storage создает пустой файл. Подскажите, пожалуйста, решение. Спасибо.

    PHP:
    1. public function testjpg() {
    2.      
    3.          
    4.             $im = imagecreatetruecolor(120, 20);
    5.             $text_color = imagecolorallocate($im, 233, 14, 91);
    6.             imagestring($im, 1, 5, 5,  'A Simple Text String', $text_color);
    7.          
    8.             // Устанавливаем тип содержимого в заголовок, в данном случае image/jpeg
    9.             header('Content-Type: image/jpeg');
    10.          
    11.             // Выводим изображение
    12.             imagepng($im);
    13.             //
    14.             //Turn on output buffering
    15.             ob_start();
    16.          
    17.             imagepng($im);
    18.          
    19.             //Store the contents of the output buffer
    20.             $buffer = ob_get_contents();
    21.             // Clean the output buffer and turn off output buffering
    22.             ob_end_clean();
    23.             // Освобождаем память
    24.             imagedestroy($im);
    25.             return response($buffer, 200)->header('Content-type', 'image/png');
    26.         }
    27.      
    28.      
    29.         public function testjpgout  () {
    30.             echo '<img src="/testjpg"/>';
    31.             Storage::put('public/order/order1/1.png', '/testjpg');
    32.         }
     
  2. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    И как, по вашему, это на русский язык переводится?
    --- Добавлено ---
    A GD точно подрублен?
     
  3. sharunm

    sharunm Активный пользователь

    С нами с:
    16 ноя 2014
    Сообщения:
    58
    Симпатии:
    0
    Не много не понимаю термина "подрублен", но версию GD выдает непосредственно из контроллера и изображение генерирует. Или Вы имели ввиду, что GD не полностью установлен?

    Про Storage. Я использую его в основном, чтобы с форм сохранять файлы на диск. А сейчас изобретаю велосипед, чтобы сгенерированное изображение как-то сохранить
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    Я не это попросил сделать. Я попросил буквально перевести строку вашего кода. ОК, сделаю сам: записать в файл public/order/order1/1.png строку '/testjpg'.

    Если вам надо записать в файл, зачем вы пытаетесь выдать в браузер?
     
  5. sharunm

    sharunm Активный пользователь

    С нами с:
    16 ноя 2014
    Сообщения:
    58
    Симпатии:
    0
    В браузере я тестировал, как работает GD, первый раз работаю с этой библиотекой. Так-то в браузер мне не нужно выводить. Но у меня не получается сохранить изображение. Вообще, задача - каждый элемент массива сделать изображением, сохранить в ZIP, отдать на скачивание, удалить данные. И, вот, у меня возникла заминка с записью файла. Сейчас допилю весь остальной функционал, вернусь к этой выгрузке.
     
  6. sharunm

    sharunm Активный пользователь

    С нами с:
    16 ноя 2014
    Сообщения:
    58
    Симпатии:
    0
    Приветствую,

    Пытаюсь вызвать эту функцию:
    PHP:
    1. public function testjpg() {
    2.             header("Content-type: image/png");
    3.             header('Content-Type: text/html; charset=utf-8');
    4.             /*
    5.             $positions = OrderPosition::where('order_id', '=', 1)->get();
    6.             $pos = $positions[0];
    7.             $posphoto = explode(';', $positions[0]->photos);
    8.             //print_r($posphoto);
    9.            
    10.             */
    11.             $img_width = 600;
    12.             $img_height = 800;
    13.            
    14.             $pic = imagecreatefrompng('https://avatanplus.com/files/resources/mid/56af7a4da4ada1529d75bf6b.png');
    15.             imagescale($pic, 600);
    16.            
    17.             $img = imagecreatetruecolor($img_width, $img_height);
    18.            
    19.             $black = imagecolorallocate($img, 0, 0, 0);
    20.             $white = imagecolorallocate($img, 255, 255, 255);
    21.             $red   = imagecolorallocate($img, 255, 0, 0);
    22.             $green = imagecolorallocate($img, 0, 255, 0);
    23.             $blue  = imagecolorallocate($img, 0, 0, 255);
    24.             $orange = imagecolorallocate($img, 255, 200, 0);
    25.            
    26.             $text = 'ROW 33, TP 55. Galoshi';
    27.             imagefill($img, 0, 0, $black);
    28.             imagefilledrectangle($img, 0, 0, $img_width, $img_height*1/10, $white);
    29.             imagestring($img, 4, $img_width*1/10, $img_height*0.4/10, iconv(mb_detect_encoding($text, mb_detect_order(), true), "UTF-8", $text),$black);
    30.             imagecopy($img, $pic, 0, $img_height*1/10, 0, 0, $img_width, $img_height);
    31.             imagePNG($img, '/var/www/broker/storage/app/temppics/gdpic.png');
    32.  
    33.         }
    Но файл не сохраняется. Подскажите, пожалуйста, в чем может быть ошибка? Спасибо
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    imagescale точно не правильно вызываете, почитайте доку. остальное - фиг его знает, отлаживать надо, смотреть, что пишет интерпретатор.
     
  8. sharunm

    sharunm Активный пользователь

    С нами с:
    16 ноя 2014
    Сообщения:
    58
    Симпатии:
    0
    Все оказалось просто, нужно было права на папку дать. Для тех, кто тоже столкнулся с такой проблемой:

    1) В начале функции включаем ошибки (мало ли еще какие-то возникнут
    PHP:
    1. ini_set('display_errors', 1);
    2) Открываем консоль или файловый менеджер. В консоли пишем:
    Код (Text):
    1. cd /var/www/moydomen/
    Далее:
    Код (Text):
    1. chmod -R 755 put_k_papke
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.554
    Симпатии:
    1.754
    @sharunm, а у вас что, ларка в режиме Production работает? В dev-режиме он должен громко материться даже о вещах куда менее критических, чем нехватка прав на папку