2010-07-08 19 views
51

işlemek için ben bir şeffaf noktanın bir görüntü akışı (PNG veya GIF)PHP komut dosyası tek şeffaf piksel (PNG veya GIF)

Kullanmak için kolay bana gösterebilir misiniz dönecektir bir PHP oluşturmak zorunda çözüm?

+2

daha iyi bu bir statik dosya haline getirmek değil midir? – mbq

+0

Bu izleme amaçlıysa izleme işlemini yapan PHP betiğini oluşturabilir, ardından normal, boş bir GIF pikseli görüntüsünü okumak için 'readfile' kullanabilirsiniz. –

+0

Martin, evet takip ediyor, ama bir dosyadan okumak istemiyorum. Sjoerd'ın çözümü tam olarak ihtiyacım olan şeydi, ama yine de teşekkürler! –

cevap

147

Şeffaf 1x1 PNG:

header('Content-Type: image/png'); 
echo base64_decode('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABAQMAAAAl21bKAAAAA1BMVEUAAACnej3aAAAAAXRSTlMAQObYZgAAAApJREFUCNdjYAAAAAIAAeIhvDMAAAAASUVORK5CYII='); 

Şeffaf 1x1 GIF: İnsanların sorularına

header('Content-Type: image/gif'); 
echo base64_decode('R0lGODlhAQABAJAAAP8AAAAAACH5BAUQAAAALAAAAAABAAEAAAICBAEAOw=='); 
+0

Merak ediyordum, neden hiçbir şeyi yankılamaya ihtiyacı var? Testlerimde piksel geri gönderilmese bile, php hala işareti izler. – jerrymouse

+13

@jerrymouse Görüntü döndürmezse, e-posta görüntüleyicisi kullanıcıya bir çeşit hata sembolü gösterebilir. – Brilliand

5

kaç yanıtlar: görüntünün içeriğini echo zorunda

. Üstbilgi, metni değil, resmi döndürdüğünüzü gösterir. Yani eğer başlık döndürdüyseniz, sadece bir başlık - veri yok. O zaman sadece görüntü :)

okuma dosyası iyi değil göndermek, görüntünün veri çıktısını yapılır, bu işe yarayabilir, ancak Sjoerd tarafından ana cevap gösterilen gibi ham verileri dönmek daha iyidir. Sadece bir okuma işlemini kaydettiğiniz için. Diskten okumak yavaş görevdir. Artık günler SSD diskleriyle hızlandı, ama yine de. Diske G/Ç hayır daha iyi.

Hatta base64 kod çözme olmadan bu kodu vardı, ama bu görüntü beyaz renktedir:

header('Content-Type: image/gif'); 
// 1x1px white gif 
die("\x47\x49\x46\x38\x37\x61\x1\x0\x1\x0\x80\x0\x0\xfc\x6a\x6c\x0\x0\x0\x2a\x0\x0\x0\x0\x1\x0\x1\x0\x0\x2\x2\x44\x1\x0\x3b"); 

Belki birisi bu tür veri dizesi için herhangi bir dosyayı dönüştürmek için nasıl bilir?

13

PHP 5.4 ve sonraki sürümlerde, base64_decode'dan iki kat daha hızlı olan hex2bin (boş GIF dosyası ile test edilmiştir) kullanmak mümkündür. Görüntü çıkışı için kod şöyle olacaktır:

Şeffaf 1x1 PNG:

header('Content-Type: image/png'); 
die(hex2bin('89504e470d0a1a0a0000000d494844520000000100000001010300000025db56ca00000003504c5445000000a77a3dda0000000174524e530040e6d8660000000a4944415408d76360000000020001e221bc330000000049454e44ae426082')); 

Şeffaf 1x1 GIF:

echo bin2hex(base64_decode($data)); 
:

header('Content-Type: image/gif'); 
die(hex2bin('47494638396101000100900000ff000000000021f90405100000002c00000000010001000002020401003b')); 

Kolayca onaltılıya base64 olarak kodlanmış veri dönüştürebilirsiniz

Veya bir dosya:

echo bin2hex(base64_decode(file_get_contents($filename))); 

Bununla birlikte, lkeas Liesis tarafından önerilen yerel PHP kaçış yöntemini kullanmak, benim referansıma göre, base64_decode değerinden yaklaşık 12.5 kat daha hızlıdır. Ve hemen hemen her PHP sürümü ile çalışır.İşte kod parçacıkları şunlardır:

Şeffaf 1x1 PNG:

header('Content-Type: image/png'); 
die("\x89\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\x00\x00\x01\x00\x00\x00\x01\x01\x03\x00\x00\x00\x25\xdb\x56\xca\x00\x00\x00\x03\x50\x4c\x54\x45\x00\x00\x00\xa7\x7a\x3d\xda\x00\x00\x00\x01\x74\x52\x4e\x53\x00\x40\xe6\xd8\x66\x00\x00\x00\x0a\x49\x44\x41\x54\x08\xd7\x63\x60\x00\x00\x00\x02\x00\x01\xe2\x21\xbc\x33\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82"); 

Şeffaf 1x1 GIF:

header('Content-Type: image/gif'); 
die("\x47\x49\x46\x38\x39\x61\x01\x00\x01\x00\x90\x00\x00\xff\x00\x00\x00\x00\x00\x21\xf9\x04\x05\x10\x00\x00\x00\x2c\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02\x04\x01\x00\x3b"); 

böyle bir dize oluşturma (bir zamanlar bitti olarak, bu kötü kokan düzenli ifadeler ile çok kolay

echo preg_replace('/../','\\x\0',bin2hex($data)); 

Veya bir dosyadan: t) hızlı çalışmak zorunda

Linux'ta
echo preg_replace('/../','\\x\0',bin2hex(file_get_contents($filename))); 
+1

ilk Şeffaf 1x1 PNG: eksik bir sonlandırma braketine sahip:)); – popas

-1

konsola yazarak biçimine dönüştürebilirsiniz:

hexdump -v -e '"\\\x" 1/1 "%X"' image.gif; echo 
İlgili konular