Отображение сгенерированного php изображения на странице - PullRequest
2 голосов
/ 17 сентября 2010

У меня есть функция, которую я использую для изменения своих изображений, и я хочу, чтобы эти изображения отображались на моей странице вместе с другим содержимым страницы.

Функция PHP Image:

<?php

 function dynamicImage($nw, $nh, $source, $stype, $dest) {
        $size = getimagesize($source);
        $w = $size[0];
        $h = $size[1];
        switch($stype) {
            case 'gif':
            $simg = imagecreatefromgif($source);
            break;
            case 'jpg':
            $simg = imagecreatefromjpeg($source);
            break;
            case 'png':
            $simg = imagecreatefrompng($source);
            break;
        }
        $dimg = imagecreatetruecolor($nw, $nh);
        $wm = $w/$nw;
        $hm = $h/$nh;
        $h_height = $nh/2;
        $w_height = $nw/2;
        if($w> $h) {
            $adjusted_width = $w / $hm;
            $half_width = $adjusted_width / 2;
            $int_width = $half_width - $w_height;
            imagecopyresampled($dimg,$simg,-$int_width,0,0,0,$adjusted_width,$nh,$w,$h);
        } elseif(($w <$h) || ($w == $h)) {
            $adjusted_height = $h / $wm;
            $half_height = $adjusted_height / 2;
            $int_height = $half_height - $h_height;
            imagecopyresampled($dimg,$simg,0,-$int_height,0,0,$nw,$adjusted_height,$w,$h);
        } else {
            imagecopyresampled($dimg,$simg,0,0,0,0,$nw,$nh,$w,$h);
        }
        header( "Content-type: image/jpeg" );
        imagejpeg( $dimg );
        imagedestroy( $dimg );
        //imagejpeg($dimg,$dest,100);
    }
?>

на странице php, где я хочу, чтобы она отображалась (я вызываю функцию dynamicImage):

<img id="profilepic" src="<?php $size=getimagesize($pic); $imgx=240; $imgy=($size[1]*$imgx)/$size[0]; dynamicImage($imgx, $imgy, $pic, substr($pic, -3), ''); ?>"  />

но в итоге получается пустая страница.

Как мне это сделать без использования базового кодирования, поскольку мне нужно поддерживать широкий спектр старых браузеров.

Заранее спасибо (этот сайт очень помог улыбается ).

Ответы [ 3 ]

5 голосов
/ 17 сентября 2010

Не вызывайте php-код прямо в теге изображения

Допустим, вы создали скрипт для создания изображения и назовите его

/myimage.php

Код:

<?php

$type = $_GET['type'] || 'png';
// remember to test if variables exist and handle gracefully
$mimetypes = array(
    'jpg' => 'image/jpeg',
    'png' => 'image/png',
    // ad nauseum
);

header('Content-type: '.$mimetypes[$type]);

// handle parsing and output of image here.   

затем вы используете его на своей странице следующим образом:

<img src="/myimage.php?width=240&height=240&type=jpg" />
3 голосов
/ 17 сентября 2010

Вы помещаете данные изображения в атрибут src, если вы хотите поместить встроенное изображение, вы должны поместить его в base64.

imagejpeg($dimg, 'tmp_image');
$handle = fopen($filename, "r");
$imgbinary = fread(fopen($imgfile, "r"), filesize($imgfile));

return 'src="data:image/jpeg;base64," . base64_encode($imgbinary) . '"';

или поместить свою функцию в отдельный скрипт и изменить

dynamicImage($imgx, $imgy, $pic, substr($pic, -3), '')

до

"src=\"dynamicimage.php?w={$imgx}&h={$imgy}&fname={$pic}&type=" . substr($pic, -3) . '";
1 голос
/ 17 сентября 2010

Ваше изображение должно быть на отдельной PHP-странице, чтобы остальное содержимое страницы.

т.е. ваша главная страница PHP будет выводить HTML как обычно. Этот HTML будет содержать тег как обычно, но атрибут src будет содержать ссылку на другую программу PHP. Вот где ты ошибся.

Итак, ваш тег должен выглядеть примерно так:

<img src='mypicture.php'>

А затем вам нужна отдельная PHP-программа mypicture.php, которая создает изображение.

Обратите внимание, что если вы создаете изображения из php-программы, вам нужно быть осторожным, чтобы выводить только данные изображения и ничего больше (следите за пустыми строками в конце кода после ?>). Вам также нужно установить тип mime в заголовках для image / jpeg (или любого другого формата).

...