PHP возвращает 1x1 прозрачный GIF, как эти данные кодируются? - PullRequest
1 голос
/ 22 апреля 2011

Я видел это изображение веб-маяка здесь

Код выглядит так:

header( 'Content-type: image/gif' );
# The transparent, beacon image
echo chr(71).chr(73).chr(70).chr(56).chr(57).chr(97).
     chr(1).chr(0).chr(1).chr(0).chr(128).chr(0).
     chr(0).chr(0).chr(0).chr(0).chr(0).chr(0).chr(0).
     chr(33).chr(249).chr(4).chr(1).chr(0).chr(0).
     chr(0).chr(0).chr(44).chr(0).chr(0).chr(0).chr(0).
     chr(1).chr(0).chr(1).chr(0).chr(0).chr(2).chr(2).
     chr(68).chr(1).chr(0).chr(59);

И это позволило PHP легко возвращать прозрачное GIF-изображение. Однако, если я хочу изменить изображение, как я могу это сделать? Как мне преобразовать любой GIF, который я создаю, в этот формат?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 22 апреля 2011

Почему бы вам просто не поместить изображение в файл и позволить PHP прочитать и вернуть его?

header('Content-type: image/gif');
readfile('file.gif');

Если вы действительно хотите преобразовать изображение в код PHP, прочитайте его по одному байтувремя и создайте код PHP следующим образом:

<?php
$fh = fopen('file.gif', 'r');
$i = 0;
echo 'echo ';
while(!feof($fh)) {
  $byte = fread($fh, 1);
  $num = ord($byte);
  echo 'chr(', $num, ')';
  if(!feof($fh)) {
    echo '.'; //there's more bytes, echo dot                                    
    if(++$i % 6 == 0) {
      echo "\n     "; //do not be too wide                                      
    }
  }
}
echo ";\n";
fclose($fh);
?>
2 голосов
/ 22 апреля 2011

лучше, чем делать это, после того, как вы установили cookie или добавили запись в журнал, вы можете просто перенаправить вызов на фактическое изображение (будь то gif / jpeg / etc) и позволить веб-серверу беспокоиться об отправке контента и т. Д .:

header("Location: http://webserver.com/images/beacon.gif");
...