我有php代码,可以创建pdf缩略图,如下所示;
<?php
$file ="test.pdf";
$im = new imagick(realpath($file).'[0]');
$im->setImageFormat("png");
$im->resizeImage(200,200,1,0);
header("Content-Type: image/jpeg");
$thumbnail = $im->getImageBlob();
echo $thumbnail;
?>
哪个效果很好。但是如果我想在网页中显示图像,我必须使用<img src="">
标记。有没有办法使用header("Content-Type: image/jpeg");
从语法和回显图像中删除<img src="">
..?或者任何人告诉我如何使用语法在网页中显示图像。
我在Windows Vista PC中运行带有php5的apache ..
答案 0 :(得分:9)
您可以尝试以这种方式显示图像:
// start buffering
ob_start();
$thumbnail = $im->getImageBlob();
$contents = ob_get_contents();
ob_end_clean();
echo "<img src='data:image/jpg;base64,".base64_encode($contents)."' />";
答案 1 :(得分:9)
使用Imagick,您可以使用base64编码:
echo '<img src="data:image/jpg;base64,'.base64_encode($img->getImageBlob()).'" alt="" />';`
但是,这种方法很慢,因此我建议先生成并保存图像$img->writeImage($path)
。
答案 2 :(得分:4)
使用base64嵌入图像是一个完全错误的方法来解决问题esp。与像PHP网页脚本一样的无状态。
你应该使用http参数来拥有一个可以执行两个任务的php文件 - 默认会发送html,参数将指示php文件打印图像。以下是“标准”的方法 -
<?php
if (!array_key_exists('display',$_GET))
{
print('<html><head></head><body><img src="'.$_SERVER['PHP_SELF'].'?display=image"></body></html>');
} else
{
// The display key exists which means we want to display an image
$file ="test.pdf";
$im = new imagick(realpath($file).'[0]');
$im->setImageFormat("png");
$im->resizeImage(200,200,1,0);
header("Content-Type: image/jpeg");
$thumbnail = $im->getImageBlob();
echo $thumbnail;
}
?>
答案 3 :(得分:3)
您可以将原始图像嵌入到您的页面中,请参阅下面的博客条目,以获取页面语法中的示例。
http://www.sveinbjorn.org/news/2005-11-28-02-39-23
但我认为将缩略图保存在文件系统上并将其作为普通文件提供会更有效率。否则,每次访问页面时都会生成缩略图。有人可能上传了这个PDF文件,因此您也可以在上传时生成缩略图。
答案 4 :(得分:3)
正如我所看到的,有太多的答案不够准确,所以这就是我的:
这将打印您现在正在进行的图像(在询问此问题时)。作为@Vasil Dakov回答的替代方法,你应该修改我给你的代码片段:
<?php
// ... Image generation goes here
header("Content-Type: image/jpeg");
ob_start();
print $im->getImageBlob();
$the_outputted_image = ob_get_flush();
?>
// Assuming that you use MVC approach and you are storing $the_outputted_image in a object and passing it to the view(ie. index.html or the HTML below the code).
//... Html code of index.html
<img src="data:image/jpg;base64 <?php print $the_outputted_image; ?>" alt="image" title="IMagick Generated Image" />
另一种方法是创建一个脚本来生成图像,将其保存在某个文件夹中(假设 img / 是文件夹)并仅返回文件的路径+文件名+扩展名:
<?php
// ... Image generation goes here
header("Content-Type: image/jpeg");
$filename = 'img/' . md5(microtime()) . '.jpg'// Microtime is just as an example, you should use your own method.
$fp = fopen($filename, "x"); //Creating and opening the file for write-only
$im->writeImageFile($fp); //Writing the image to the file pointer (I would recommend writing it using, fwrite(), because it is binary-safe writing method)
fclose($fp);
?>
// Html
<img src="<?php print $filename; ?>" alt="image" title="IMagick Generated Image" />
答案 5 :(得分:1)
就我而言,我发现了这样的解决方案:
$im = new Imagick("http://www.yourserver.com/upload/file_name.pdf");
$im->setResolution(300, 300); // if higher image will be good to read
$im->setIteratorIndex(0); // read first page
$im->setImageFormat('jpg');
header('Content-Type: image/jpeg');
ob_start();
print $im->getImageBlob();
$contents = ob_get_contents();
ob_end_clean();
echo "<img src='data:image/jpg;base64,".base64_encode($contents)."' />"; //output as image
祝你好运。
答案 6 :(得分:0)
唯一的解决方案是将您的图像转换为base64并将其包含为嵌入式base64图像(data:image/png;base64,
)。 Further reference
但IE 6和7不支持此功能。