Waiting
12.09.2018 - 00:42
Всем привет!
Помогите поалуйста. Никак не могу добиться чо бы картинка в 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ка
12.09.2018 - 08:35
Оформите код и покажите его полностью,а не урезком
Waiting
12.09.2018 - 11:15
Цитата (Эли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
12.09.2018 - 12:01
$img = imagecreate ('300', '400'); // создаем изображение (по идее 8 бит) черная заливка
imagejpeg($img, './image.jpg'); //сохраняем изображение. на выходе по идее должно быть 8 бит а получаем 24.
imagedestroy($img); // освобождаем память.
ну и само изображение что получилось "image.jpg", просто черный прямоугольник, 24 бита.
image.jpg
Waiting
13.09.2018 - 23:17
Последняя ссылка - похоже то что нужно, т.к. мне нужна еще конвертация и в 1 бит. Попробую, отпишусь.
Waiting
28.01.2019 - 18:29
Напишу на всякий случай как решил вопрос. Может кому пригодится когда-нибудь.
jpeg сохранялся только 24 бита.
8 бит можно сохранить в png.
8 бит в джипеге получил с помощью утилиты convert из пакета ImageMagick.
$handle = popen("convert $SRC -depth 8 -colorspace gray $DEST", 'r');