Здравствуйте, друзья, Возникла проблемка. В общем стоит задача позиции заказов сохранять в файлы изображений (где есть фото, цена, описание и т.п.). Задача следующая - выгружаем изображения в папку, архивируем и отдаем на скачивание. Начал осваивать GD на простых примерах. Сделал две функции. Одна создает изображение, другая сохраняет на диск. Взял пример из статей. Так вот, в браузере PNG выводится <img src="/testjpg">, сохраняется как PNG файл. Но переместить его в папку на диск не получается. imagepng не записывает на диск, почему-то. А imagejpeg и вовсе функция undefind. /testjpgout изображение отображает, а Storage создает пустой файл. Подскажите, пожалуйста, решение. Спасибо. PHP: public function testjpg() { $im = imagecreatetruecolor(120, 20); $text_color = imagecolorallocate($im, 233, 14, 91); imagestring($im, 1, 5, 5, 'A Simple Text String', $text_color); // Устанавливаем тип содержимого в заголовок, в данном случае image/jpeg header('Content-Type: image/jpeg'); // Выводим изображение imagepng($im); // //Turn on output buffering ob_start(); imagepng($im); //Store the contents of the output buffer $buffer = ob_get_contents(); // Clean the output buffer and turn off output buffering ob_end_clean(); // Освобождаем память imagedestroy($im); return response($buffer, 200)->header('Content-type', 'image/png'); } public function testjpgout () { echo '<img src="/testjpg"/>'; Storage::put('public/order/order1/1.png', '/testjpg'); }
Не много не понимаю термина "подрублен", но версию GD выдает непосредственно из контроллера и изображение генерирует. Или Вы имели ввиду, что GD не полностью установлен? Про Storage. Я использую его в основном, чтобы с форм сохранять файлы на диск. А сейчас изобретаю велосипед, чтобы сгенерированное изображение как-то сохранить
Я не это попросил сделать. Я попросил буквально перевести строку вашего кода. ОК, сделаю сам: записать в файл public/order/order1/1.png строку '/testjpg'. Если вам надо записать в файл, зачем вы пытаетесь выдать в браузер?
В браузере я тестировал, как работает GD, первый раз работаю с этой библиотекой. Так-то в браузер мне не нужно выводить. Но у меня не получается сохранить изображение. Вообще, задача - каждый элемент массива сделать изображением, сохранить в ZIP, отдать на скачивание, удалить данные. И, вот, у меня возникла заминка с записью файла. Сейчас допилю весь остальной функционал, вернусь к этой выгрузке.
Приветствую, Пытаюсь вызвать эту функцию: PHP: public function testjpg() { header("Content-type: image/png"); header('Content-Type: text/html; charset=utf-8'); /* $positions = OrderPosition::where('order_id', '=', 1)->get(); $pos = $positions[0]; $posphoto = explode(';', $positions[0]->photos); //print_r($posphoto); */ $img_width = 600; $img_height = 800; $pic = imagecreatefrompng('https://avatanplus.com/files/resources/mid/56af7a4da4ada1529d75bf6b.png'); imagescale($pic, 600); $img = imagecreatetruecolor($img_width, $img_height); $black = imagecolorallocate($img, 0, 0, 0); $white = imagecolorallocate($img, 255, 255, 255); $red = imagecolorallocate($img, 255, 0, 0); $green = imagecolorallocate($img, 0, 255, 0); $blue = imagecolorallocate($img, 0, 0, 255); $orange = imagecolorallocate($img, 255, 200, 0); $text = 'ROW 33, TP 55. Galoshi'; imagefill($img, 0, 0, $black); imagefilledrectangle($img, 0, 0, $img_width, $img_height*1/10, $white); 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); imagecopy($img, $pic, 0, $img_height*1/10, 0, 0, $img_width, $img_height); imagePNG($img, '/var/www/broker/storage/app/temppics/gdpic.png'); } Но файл не сохраняется. Подскажите, пожалуйста, в чем может быть ошибка? Спасибо
imagescale точно не правильно вызываете, почитайте доку. остальное - фиг его знает, отлаживать надо, смотреть, что пишет интерпретатор.
Все оказалось просто, нужно было права на папку дать. Для тех, кто тоже столкнулся с такой проблемой: 1) В начале функции включаем ошибки (мало ли еще какие-то возникнут PHP: error_reporting(E_ALL); ini_set('display_errors', 1); 2) Открываем консоль или файловый менеджер. В консоли пишем: Код (Text): cd /var/www/moydomen/ Далее: Код (Text): chmod -R 755 put_k_papke
@sharunm, а у вас что, ларка в режиме Production работает? В dev-режиме он должен громко материться даже о вещах куда менее критических, чем нехватка прав на папку