[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: jpeg 8bit
Waiting
Всем привет!
Помогите поалуйста. Никак не могу добиться чо бы картинка в jpg сохранилась в 8bit.

png получается:
$srcimage = imagecreatefromjpeg($file_name);
list($width, $height) = getimagesize($file_name);
$img = imagecreatetruecolor($width, $height);
$bga = imagecolorallocatealpha($img, 0, 0, 0, 127);
imagecolortransparent($img, $bga);
imagefill($img, 0, 0, $bga);
imagecopy($img, $srcimage, 0, 0, 0, 0, $width, $height);
imagetruecolortopalette($img, false, 255);
imagesavealpha($img, true);
imagepng($img, TN_DOC_ROOT.'/image.png');
imagedestroy($img);

Все аналогичное в jpeg сохраняет как 24 bit. Уже все перепробовал. Но не выходит каменный цветок.
$srcimage = imagecreatefromjpeg($file_name);
list($width, $height) = getimagesize($file_name);
$img = imagecreatetruecolor($width, $height);
$bga = imagecolorallocatealpha($img, 0, 0, 0, 127);
imagecolortransparent($img, $bga);
imagefill($img, 0, 0, $bga);
imagecopy($img, $srcimage, 0, 0, 0, 0, $width, $height);
imagetruecolortopalette($img, false, 255);
imagesavealpha($img, true);
imagefilter($img, IMG_FILTER_GRAYSCALE);
imagejpeg($img, TN_DOC_ROOT.'/image.jpg');
imagedestroy($img);
Эли4ка
Оформите код и покажите его полностью,а не урезком
Waiting
Цитата (Эли4ка @ 12.09.2018 - 08:35)
Оформите код и покажите его полностью,а не урезком

Так и оформил. Код этот рабочий. Кусок прям вставляем к себе и он работает:

$srcimage = imagecreatefromjpeg($file_name);
list($width, $height) = getimagesize($file_name);
$img = imagecreatetruecolor($width, $height);
$bga = imagecolorallocatealpha($img, 0, 0, 0, 127);
imagecolortransparent($img, $bga);
imagefill($img, 0, 0, $bga);
imagecopy($img, $srcimage, 0, 0, 0, 0, $width, $height);
imagetruecolortopalette($img, false, 255);
imagesavealpha($img, true);
imagefilter($img, IMG_FILTER_GRAYSCALE);
imagejpeg($img, './image.jpg'); //ну тут можно поменять так.
imagedestroy($img);

Вся проблема насколько я понимаю в imagejpeg. Эта штука сохраняет файл в 24бит.
Даже если сделать так:

$img = imagecreate ($width, $height);
imagejpeg($img, './image.jpg');

То файл image.jpg будет 24 бита.
Хотя по идее функция imagecreate должна создавать 8 битку и imagejpeg сохранят как есть.

И такая проблема только с джипег. С пнг все ровно то же самое, но получаем требуемые 8 бит.
Waiting
$img = imagecreate ('300', '400'); // создаем изображение (по идее 8 бит) черная заливка
imagejpeg($img, './image.jpg'); //сохраняем изображение. на выходе по идее должно быть 8 бит а получаем 24.
imagedestroy($img); // освобождаем память.

ну и само изображение что получилось "image.jpg", просто черный прямоугольник, 24 бита.

image.jpg
Kusss
Хм, может просто применить фильтр ?
http://php.net/manual/ru/function.imagefilter.php
IMG_FILTER_GRAYSCALE


или вот
https://stackoverflow.com/questions/3851779...-image-with-php
Waiting
Цитата (Kusss @ 12.09.2018 - 23:45)
Хм, может просто применить фильтр ?
http://php.net/manual/ru/function.imagefilter.php
IMG_FILTER_GRAYSCALE


или вот
https://stackoverflow.com/questions/3851779...-image-with-php

Последняя ссылка - похоже то что нужно, т.к. мне нужна еще конвертация и в 1 бит. Попробую, отпишусь.
Waiting
Напишу на всякий случай как решил вопрос. Может кому пригодится когда-нибудь.

jpeg сохранялся только 24 бита.
8 бит можно сохранить в png.

8 бит в джипеге получил с помощью утилиты convert из пакета ImageMagick.

$handle = popen("convert $SRC -depth 8 -colorspace gray $DEST", 'r');
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.