PHP ile PNG Şeffaflık

5 Cevap php

Hey bazı sorun, ben ondan bir küçük resim oluşturmak zaman png şeffaflığı korumak için bu olan herkes herhangi bir deneyime sahip çalışıyorsun? Herhangi bir yardım büyük olurdu, burada ben şu anda ne yapıyorum bulunuyor:

$fileName= "../js/ajaxupload/tees/".$fileName;

list($width, $height) = getimagesize($fileName);

$newwidth = 257;
$newheight = 197;

$thumb = imagecreatetruecolor($newwidth, $newheight);
imagealphablending($thumb, true);
$source = imagecreatefrompng($fileName);
imagealphablending($source, true);

imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

imagesavealpha($thumb, true);
imagepng($thumb,$newFilename);

5 Cevap

Ben geçmişte böyle yapıyor başarılı oldu:

$thumb = imagecreatetruecolor($newwidth, $newheight);
imagealphablending($thumb, false);
imagesavealpha($thumb, true);  

$source = imagecreatefrompng($fileName);
imagealphablending($source, true);

imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);

imagepng($thumb,$newFilename);

Ben çıkış görüntü kalitesi çok daha iyi kullanarak imagecopyresampled() daha bulunan imagecopyresized()

Renk şeffaflık endeksi unutun, tüm render ürünlerinde asla çalışır. Bunun yerine bir alfa katman maskesi kullanın:

$image = imagecreatetruecolor($size, $size);

imagealphablending($image, false);
imagesavealpha($image, true);

$trans_layer_overlay = imagecolorallocatealpha($image, 220, 220, 220, 127);
imagefill($image, 0, 0, $trans_layer_overlay);

Bkz dycey's answer to "How do I resize...". Esasen, herhangi bir diğer işlemleri yapmadan önce şeffaflık ile tüm arka plan doldurmak gerekir.

imagecopyresized düzgün saydamlığı desteklemez.

imagecopymerge, ama yeniden boyutlandırmak değildir etmez.

Çözüm? Muhtemelen elle şeyi yeniden boyutlandırma bitirmek istiyorum.

Bu işlevler güzel sonuçlar için kılan bir şey değil, iyi bir oyuncak yatan GDlib kitaplığa erişmek, ancak. Eğer seçenek varsa, bunun yerine imagemagick kullanın. Olumsuz hiçbir iyi php bağlamaları şu anda, bu yüzden genellikle paylaşılan ana izin değiliz kabuk üzerinde erişmek için ihtiyaç olmasıdır.