Nasıl gri / alfa renk türü için bir PNG kontrol etmek için?

3 Cevap php

PHP ve GD sorun imagecreatefrompng() kullanırken alfa tip gri tonlama PNG görüntüleri oluşturmak gibi görünüyor. Sonuçlar inanılmaz çarpıtılmıştır.

Herkes uyumsuzluk kullanıcıya bildirmek için renk türü için test etmek için bir yol biliyordum merak ettim?

Örnek:

Original Image: http://dl.dropbox.com/u/246391/Robin.png
Resulting Image: http://dl.dropbox.com/u/246391/Robin_result.png

Kod:

<?php

$resource = imagecreatefrompng('./Robin.png');
header('Content-type: image/png');
imagepng($resource);
imagedestroy($resource);

Alkış,

Aron

3 Cevap

Bir PNG görüntünün renk tipi (0'dan başlayarak) dosyasında 25 ofset bayt saklanır. Eğer PNG dosyasının gerçek bayt ele alabilirsiniz Yani, sadece (PHP yapmam, bunu yapabilmek için nasıl bilmiyorum) bayt 25 bakmak:

  • 0 - gri tonlama
  • 2 - RGB
  • 3 - paleti RGB
  • 4 - gri tonlama + alfa
  • 6 - RGB + alfa

Yukarıdaki bayt (24 ofset) kanal başına bit sayısını verir. the PNG spec daha fazla bilgi için bkz.

(O renk tip 0 2 veya 3 olduğunda) hafif bir bükülme bir PNG dosyası TRNS öbek tarafından (GIF gibi) "1-bit alfa" olabilir.

i landed here today searching for a way to tell (via php) if a specific .png image is an alpha-png one -
David Jones' answer points to the right direction, really easy to implement in php:

file_get_contents to load just that 25' byte (there it is, indeed!), and
ord() to get its ASCII value, to test it (against '6' in my case)

if(ord(file_get_contents($alpha_png_candidate, NULL, NULL, 25, 1)) == 6) {
  is_alpha_png_so_do_something();
  }

actually i needed that for assuring backward compatibility with ie6 within cms-user-generated-pages, to replace all alpha-png < img > tags with inline-block < spans > - the alpha-png file will then be served as variable for the ms-proprietary css property filter

.alpha_png_span{
  filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(
    src='$alpha_png_candidate', sizingMethod='crop')
  }

... Ve tüm eserler, bu yüzden teşekkür!

paolo

see this answer :

Another usefull note for those using ImageCreateFromPng: PHP and GD do not recognize grayscale/alpha images.

So if you use grayscale images with transparency between 0% and 100%, then save the image as RGB.

En azından bu GIMP 2.2.8 ile yapılan resimlerle PHP Sürüm 4.4.2-1 ve 5.1.2-1 doğrudur.

url : http://php.net/manual/en/function.imagecreatefrompng.php