0

我建立了一个imgResize类:

class imgResize
{
   public static function resizeAndOutput($img) {

    $orginal_img = $img;
    $width = 591;
    $height = 332;
    $new_width = 161;
    $new_height = 91;

    $edit_img = imagecreatetruecolor($new_width, $new_height);
    $image = imagecreatefromjpeg($orginal_img);
    imagecopyresampled($edit_img, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
    header('Content-Type: image/jpeg');

    imagejpeg($edit_img);
}

}

在 html 中,我尝试动态img显示:

<img class="img_small" src="<?php imgResize::resizeAndOutput($img)">

只是得到这样的二进制数据:

�����JFIF���������&gt;CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), default quality ���C�           $.' 

我该如何解决我的问题?

4

4 回答 4

1

您必须在数据 uri 中编码您的图像(并将 base64 编码数据作为字符串嵌入到您的 html 中)并在 php 中删除该 header() 行,

或创建指向该图像的链接,例如http://example.com/?myimage=id并按照您的操作输出图像(如提供正确的标题并回显生成的图像)

告诉我您是否需要更多信息,或者这提供了足够的见解。

于 2013-07-02T10:53:06.607 回答
0

如果你直接将它输出到一个src元素中,它当然只是 HTML 中的二进制垃圾。这不是<img>元素的工作方式。一个<img>元素src需要有一个指向图像的URL 。这可以是 URL,如img/foo.jpg、 或app/some_script_that_outputs_an_image.php,或者是Data URI。但不仅仅是二进制数据。输出图像的脚本将在第二种情况下工作,作为app/some_script_that_outputs_an_image.php链接的目标。

于 2013-07-02T10:53:04.863 回答
0

你实际上做对了,但在最后一部分你有一个问题。您必须保存图像,然后将图像返回urlimg元素。试试这个代码:

class imgResize
{
   public static function resizeAndOutput($img) {

    $orginal_img = $img;
    $width = 591;
    $height = 332;
    $new_width = 161;
    $new_height = 91;

    $edit_img = imagecreatetruecolor($new_width, $new_height);
    $image = imagecreatefromjpeg($orginal_img);
    imagecopyresampled($edit_img, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
    header('Content-Type: image/jpeg');

    //Now we have the image lets create a random filename
    //Modify this to your needs
    $filename = "images/IMG_" . mt_rand(1000,9999) . ".jpg";
    //Random sometimes sucks.. Lets see if we already got a file with that name
    //And if exists, loop until we get a unique one
    while(file_exists($filename)) {
        $filename = "images/IMG_" . mt_rand(1000,9999) . ".jpg";
    }
    //Now let's save the file
    imagejpeg($edit_img, $filename);
    //And finally return the file url
    return $filename;
}
}

如果不想保存,直接输出到浏览器即可。你不需要任何img标签。那是因为在使用imagejpeg的时候就像是直接在浏览器中打开了一个图片文件一样。(我不知道我是否清楚。我只是试图描述它的真实情况)

所以php文件将是相同的,你不需要任何html。只需调用该函数。它会做它需要做的事情:

imgResize::resizeAndOutput($img);

于 2013-07-02T11:00:03.487 回答
0
class imgResize

{ 公共静态函数 resizeAndOutput($img) {

$orginal_img = $img;
$width = 591;
$height = 332;
$new_width = 161;
$new_height = 91;

$edit_img = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($orginal_img);
imagecopyresampled($edit_img, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
ob_start ();
imagejpeg($edit_img);
$image_data = ob_get_contents ();
ob_end_clean ();
return base64_encode($image_data);

}

HTML

<img class="img_small" src="data:image/jpeg;base64,<?php echo imgResize::resizeAndOutput($img)">
于 2013-07-02T15:00:47.920 回答