PHP输出图像问题

Posted

技术标签:

【中文标题】PHP输出图像问题【英文标题】:PHP output image issues 【发布时间】:2012-05-03 00:16:18 【问题描述】:
if (file_exists($path)) 

    $fileContent = id3_getImage($path); 
    $fileMime = id3_getMimeOfImage($path); // is set to image/jpeg

    if ($fileMime != "") 
        header('Content-Type: '.$fileMime);
        print($fileContent);
        die;
    

所以上面的代码在浏览器中不起作用,但是当我用图像制作图像时

$img = imagecreatefromstring($fileContent);
imagejpeg($img, 'test.jpg');die;

图像已创建,我可以在我的计算机上查看它。所以我不知道我做错了什么:(

*可能是 apache conf 中的设置吗?老实说,我对此一无所知

【问题讨论】:

我需要动态创建图像,因此创建图像然后将它们重定向到该路径并不是一个真正的选项。无论如何,它应该以这种方式工作 只需使用imagejpeg($img, NULL); 请解释一下 id3_getImage() 和 id3_getMimeOfImage() - 这些不是有效的运算符。 这是一个自定义函数,使用类 getid3 (getid3.sourceforge.net),我确信 $var 的内容是正确的,因为使用 imagejpeg 可以生成有效的图像。 因为我正在从音乐文件中检索封面以将其显示在网站上。 【参考方案1】:
header('Content-Type: image/jpeg');

// Output the image
imagejpeg($img);

您需要先发送标头。但是,如果您想创建图像并显示,则需要创建并为浏览器阅读此内容。

readfile($filename);

你可以在这里读到这个人: http://php.net/manual/en/function.readfile.php

【讨论】:

我不确定你的意思,你不需要使用 readfile($filename) 因为文件的内容与 $var 中的内容相同,并且它们都将其打印到浏览器 你需要使用imagejpeg($img, 'test.jpg');readfile('test.jpg'); 我不确定,因为我认为它会有相同的输出,但无论如何我已经测试过了,没有结果:( 如果你使用的是文件名文件,你不会在浏览器上发送结果。那只是为了保存文件。但是如果你想保存文件并在浏览器上打印,你需要使用readfile()。如果您只想在浏览器上打印图像,您可以使用 imagejpeg() 而不使用 $filename var。 我不想保存图像,并且使用 imagejpeg 不起作用。这就是为什么我不知道错误是什么原因造成的,因为它实际上应该可以工作。【参考方案2】:

我使用 Google Groups 中的 smartReadFile.php 来显示任何类型的文件。

https://jplayer.googlegroups.com/attach/f308294ddea52f6c/smartReadFile.php?view=1&part=4

真的很聪明。 =)

<?php 

require "smartReadFile.php";

$dir = 'images/';
$filename = 'someimage' . '.jpg';
$location = $dir.$filename;

smartReadFile($location, $filename);

?>

【讨论】:

使用它但仍然无法正常工作,我想我需要在我的 apache conf 中更改一些东西。由于 URL 没有扩展名 .jpg,实际上它没有任何扩展名。这只是/cover/【参考方案3】:

从 DB 读取时,这个对我有用

$image = imagecreatefromstring([path/DBfiels]);  
header('content-type: image/jpeg');  
imagejpeg($image); 
imagedestroy($image); 

【讨论】:

以上是关于PHP输出图像问题的主要内容,如果未能解决你的问题,请参考以下文章

将 php 脚本的图像输出保存为文件

php中的图像水印

尝试使用 PHP imgpng 将图像输出到浏览器时,我得到一个损坏的图像

使用 php 渲染图像并使用 html <img> 标签输出

如何使用 PHP 让浏览器缓存图像?

php imagick调整图像代码无法正常工作