2009-08-15 29 views
0

我有一個水印腳本我正在處理,結果是在PNG和JPG圖像上很好,但是一個gif圖像,不太好。我正在使用PHP和GD在PHP中的GIF圖像質量差GD

下面您可以看到水印質量的差異。

任何人都知道如何改善這一點?

對於GIF版本我使用

$image = imagecreatefromgif($source_file); 
imagecopymerge($image, $watermark, $x, $y, 0, 0, $water_width, $water_height, 65); 
imagegif($image, $source_file); 

gif圖片=質量差 gif image http://img2.pict.com/fd/46/00/1471179/0/gif.gif

jpg圖片=好 jpg image http://img2.pict.com/82/a1/5a/1471181/0/jpg.jpg

回答

5

GIF圖像有一個固定的調色板,可以包含最多256種顏色。這裏的問題可能是您插入的圖像使用目標圖像中不可用的顏色。

我從來沒有試過這個,但它可能值得一試。你可以嘗試先將gif圖像轉換爲真彩色圖像,然後進行水印處理,然後將其轉換回gif。

$image = imagecreatefromgif($source_file); 
// create a true color image of the same size 
$image2 = imagecreatetruecolor(imagesx($image), imagesy($image)); 
// copy the original gif image on to the true color image 
imagecopy($image2, $image, 0, 0, 0, 0, imagesx($image), imagesy($image)); 
// copy the watermark onto the new true color image 
imagecopymerge($image2, $watermark, $x, $y, 0, 0, $water_width, $water_height, 65); 
// write the new image to disk 
imagegif($image2, $source_file); 

試試看看它是否有所作爲。

還有幾個可用的調色板操作功能,可以幫助:

  1. imagecolormatch()
  2. imagetruecolortopalette()
  3. imagepalettecopy()

我不知道你將如何應用它們,但我猜測你可以採取一些措施來改善結果。

+0

+ 1,比我的回答更全面。 – MrMage 2009-08-15 21:57:38

2

GIF只支持256個色調色板。因此,您的水印圖像的顏色必須映射到此調色板。這導致它們以不同於以前的顏色被渲染和保存。由於這個小調色板,不管怎樣,GIF不推薦用於照片。

0

GIF圖像永遠不會看起來很棒,因爲調色板是256色。正如MrMage所說,顏色映射會嚴重逼近圖像的真實顏色。你最好用PNG,他們確實支持透明度。