Библиотека PHP GD превращает объединенное изображение из зеленого в оранжевый - PullRequest
2 голосов
/ 11 января 2012

У меня есть два gif-изображения, одно с серым градиентным фоном и одно с логотипом.Так, например, на рисунках ниже зеленый прямоугольник - это логотип.

Моя проблема в том, что когда я объединяю два gif-файла с использованием библиотеки PHP GD, зеленый становится оранжево-коричневым и выигрывает 'вернуть первоначальный цвет.Пожалуйста, кто-нибудь может указать, что я делаю неправильно?

  $base_image = 'img_in.gif';
  $logo_image = 'logo.gif';

  // Create images from files
  $source   = imagecreatefromgif($base_image);
  $logo   = imagecreatefromgif($logo_image);

  //---------------------Logo-----------------------------------\\
  imagecolortransparent($logo, imagecolorallocate($logo, 0, 0, 0));
  imagecopymerge($source, $logo, 152, 33, 0, 0, 153, 26, 100);

  // -------------------------------Output--------------------------\\
  imagegif($source,$image_out);
  imagedestroy($source);

Зеленый цвет - это то, как он должен выглядеть. Оранжевый цвет - это то, как он выглядит в итоге This is how it should look

This is how it ends up looking

Выше показано, как это должно выглядеть Выше показано, как оно выглядит в итоге

Ответы [ 2 ]

2 голосов
/ 11 января 2012

Поскольку GIF основаны на поддонах , каждый GIF может использовать только 256 цветов - те, которые размещены в его палитре. Если вы копируете один GIF в другой, библиотека должна каким-то образом гомогенизировать палитры.

Я бы предложил преобразовать эти GIF-изображения в PNG (или какой-нибудь формат с большим количеством цветов), выполнить обработку и, наконец, преобразовать обратно в GIF.

В общем, результаты должны выглядеть лучше.

0 голосов
/ 11 января 2012

Спасибо за ответы, ребята.Я понял, что я сохраняю GIF только с 63 цветами, а не 256!Doh!Все равно спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...