Компоновка PNG в JPEG не удалась (все цвета отображаются черным) только в одном конкретном файле JPEG - PullRequest
0 голосов
/ 04 февраля 2012

Я создаю приложение, которое использует Ruby + RMagick для компоновки изображений PNG на различные фоны JPEG. Все работает, , но мы нашли один конкретный фон JPEG, для которого PNG составлен как черное пятно. Прозрачность PNG соблюдается; форма «пятна» правильная, но цвета теряются и становятся черными.

Я пробовал много JPEG-файлов, чтобы найти другой, который дает тот же результат, но (пока) не удалось.

Я подозреваю, что это может быть связано с битовой глубиной или каким-либо другим параметром рассматриваемого файла JPEG. Я искал в Интернете, ищу инструмент, который может проанализировать этот JPEG и сообщить мне все параметры, которые могут иметь отношение, но еще ничего не нашел.

  1. Что-нибудь подобное случалось с тобой? В чем причина?
  2. Исходя из ваших знаний о формате JPEG, есть ли другие параметры, которые могут иметь значение?
  3. Вам известен какой-либо инструмент, который может анализировать файлы JPEG и сообщать мне битовую глубину и другие параметры? Или, если я открою JPEG в шестнадцатеричном редакторе, подскажите, как найти эту информацию?

1 Ответ

0 голосов
/ 06 февраля 2012

Я до сих пор не нашел, что особенного в этом одном JPG, с которым составная операция не работает правильно, но я обошел его, используя следующий код:

back  = Magick::Image.from_blob(jpg_data).first
png   = Magick::Image.from_blob(png_data).first
page1 = Magick::Image.new(back.columns, back.rows)
page1.composite!(back, 0, 0, Magick::OverCompositeOp)
page1.composite!(png, png_x, png_y, Magick::OverCompositeOp)

Вместо:

back  = Magick::Image.from_blob(jpg_data).first
png   = Magick::Image.from_blob(png_data).first
page1 = back.composite(png, png_x, png_y, Magick::OverCompositeOp)
...