Изображение флопа PHP/Imagick/PDFlib меняет свою разрядность

У меня есть изображение в формате PNG, и я пытаюсь Flop (зеркало) с помощью функции imagick в php.

Базовое изображение в формате 24 бит RGB

и после преобразования он получает

8-битный паллет

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

Мой код прост ---->

$im = new Imagick($background_image);
$im->flopImage();
$im->writeimage($background_image."_flop.png");

Дата изменения => 29 октября 2013 г. Исходное изображение -> Размер 4,68 КБ Разрядность 32 Перевернутое изображение -> Размер 7,99 КБ Разрядность 64 Автоматически изменяет свои свойства ОРИГИНАЛ **  *ОРИГИНАЛ***

Преобразовано ***Преобразовано***


person anshuVersatile    schedule 25.10.2013    source источник
comment
Вы уверены, что проблема связана с Imagick, а не с рендерингом изображения в PDFLib? Исходное изображение, которое вы предоставили, отлично конвертируется для меня.   -  person Danack    schedule 28.10.2013
comment
Привет, Данак.... Когда я проверил оба изображения (исходное и преобразованное) в фотошопе, он показал, что ori--> 24 бит и conv--> 8 бит   -  person anshuVersatile    schedule 29.10.2013
comment
Можете ли вы опубликовать точный файл после того, как он только что «провалился». Тот, который вы разместили, был изменен по сравнению с оригиналом, что говорит о том, что с ним происходят другие вещи.   -  person Danack    schedule 29.10.2013
comment
Привет Данак!!! Спасибо за ваше драгоценное время... Но кажется, что это ошибка, похожая на что-то в Imagick, потому что, если я использую GD для этого изображения, он работает отлично, только Imagick создает фатальное изображение....   -  person anshuVersatile    schedule 29.10.2013


Ответы (1)


Imagick использует наименьший возможный формат для сохранения изображения. Сохранение в этих форматах дает одно и то же изображение, но имеет размеры:

  • Палитра - 3.38kB
  • RGBA 32 бит — 6,14 КБ
  • RGBA 64 бит — 8,09 КБ

Сохранение в файл наименьшего возможного размера — это обычно то, чего хотят люди. Однако вы можете отключить это несколькими способами.

Вы можете указать Imagick использовать тот же формат PNG, что и исходное изображение, установив для параметра png:format значение png00. например

$imagick = new Imagick(realpath("../images/FlopOriginal.png"));
$imagick->flopImage();
$imagick->setOption('png:format', 'png00');
$imagick->writeImage("../images/Flop.png");

Полные варианты для png:format: png8, png24, png32, png48, png64 и png00.

В качестве альтернативы вы можете явно указать формат изображения, который будет использоваться при сохранении файла PNG, через png:bit-depth и png:color-type, например.

$imagick = new Imagick(realpath("../images/FlopOriginal.png"));
$imagick->flopImage();
$imagick->setOption('png:bit-depth', '8');
$imagick->setOption('png:color-type', 6);
$imagick->writeImage("../images/Flop.png");

Значения типа цвета берутся из libpng.h и таковы:

PNG_COLOR_TYPE_GRAY         0
PNG_COLOR_TYPE_RGB          2
PNG_COLOR_TYPE_PALETTE      3
PNG_COLOR_TYPE_GRAY_ALPHA   4
PNG_COLOR_TYPE_RGB_ALPHA    6

Оба этих метода создают перевернутое изображение, которое является 32-битным RGBA, как исходное изображение.

person Danack    schedule 29.10.2013
comment
@anshuVersatile, кстати, изображения, которые он создавал раньше, действительны и представляют собой то же изображение, что и 32-битный файл. Вероятно, это ошибка в pdflib, которая не открывает файлы правильно. - person Danack; 29.10.2013
comment
Для информации --› PDFlib не поддерживает эту разрядность, поэтому они были взломаны..... Но теперь все хорошо... Рендеринг плавный... И еще один --› Приятно познакомиться.... - person anshuVersatile; 29.10.2013