在页面上显示php生成的图像

时间:2010-09-17 11:25:33

标签: php image image-processing image-manipulation

我有一个用于修改图像的功能,我想在我的页面上显示这些图像以及其他页面内容。

PHP图片功能:

<?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 个答案:

答案 0 :(得分:5)

请勿直接在图片代码中调用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" />

答案 1 :(得分:3)

您正在将图像数据放到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) . '"';

或将您的函数放入separete脚本并更改

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

"src=\"dynamicimage.php?w={$imgx}&h={$imgy}&fname={$pic}&type=" . substr($pic, -3) . '";

答案 2 :(得分:1)

您的图片需要位于与页面内容其余部分分开的PHP页面中。

即您的主PHP页面将正常生成HTML输出。该HTML将包含正常的标记,但src属性将包含指向另一个PHP程序的链接。这是你出错的地方。

所以你的标签需要看起来像这样:

<img src='mypicture.php'>

然后你需要一个名为mypicture.php的独立PHP程序来生成图像。

请注意,如果您是从php程序生成图像,则需要注意只输出图像数据而不是其他内容(在?>之后注意代码末尾的空白行) 。您还需要将标题中的mime类型设置为image / jpeg(或任何格式)。