我构建了一类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���������>CREATOR: gd-jpeg v1.0 (using IJG JPEG v80), default quality ���C� $.'
我如何解决我的问题?
答案 0 :(得分:1)
你必须在数据uri中编码你的图像(并在你的html中将base64编码数据嵌入为字符串)并在php中删除那个header()行,
或创建指向该图片的链接,例如http://example.com/?myimage=id并按原样输出图像(如提供正确的标题并回显生成的图像)
告诉我您是否需要更多信息,或者这可以提供足够的见解。
答案 1 :(得分:0)
如果将其直接输出到src
元素中,它当然只是HTML中的二进制垃圾。这不是<img>
元素的工作方式。 <img>
元素的src
需要指向图片的网址。这可以是img/foo.jpg
,app/some_script_that_outputs_an_image.php
或Data URI等网址。但不仅仅是二进制数据。输出图像的脚本将在第二种情况下工作,作为app/some_script_that_outputs_an_image.php
链接的目标。
答案 2 :(得分:0)
你实际做得对,但在最后一部分你有问题。您必须保存图像,然后将图像的url
返回到img
元素。尝试以下代码:
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);
答案 3 :(得分:0)
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);
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)">