我正在使用phalcon php框架。我的应用程序中有一个博客,用户可以提交附在他博客帖子上的图像,并在查看帖子时显示。我想在列出每个帖子的博客的索引页面上显示此图像,但是,我希望它是缩略图以减小其大小。我能够使用imagick将缩略图保存在目录中并从那里加载缩略图,但是,我需要避免每次只显示它们时保存缩略图并生成缩略图。 这是我用imagick
创建图像的代码public function thumbnail($img)
{
$maxsize = 100;
$image = new Imagick($img);
// Resizes to whichever is larger, width or height
if($image->getImageHeight() <= $image->getImageWidth())
{
$image->resizeImage($maxsize,0,Imagick::FILTER_LANCZOS,1);
}
else
{
$image->resizeImage(0,$maxsize,Imagick::FILTER_LANCZOS,1);
}
// Set to use jpeg compression
$image->setImageCompression(Imagick::COMPRESSION_JPEG);
// Set compression level (1 lowest quality, 100 highest quality)
$image->setImageCompressionQuality(75);
// Strip out unneeded meta data
$image->stripImage();
// Writes resultant image to output directory
$image->writeImage($uploaddir.'/thumbs/'. basename($_FILES['photo']['name']));
// Destroys Imagick object, freeing allocated resources in the process
$image->destroy();
}
我试图删除保存图像的最后两行,然后销毁imagick对象,但无法继续在索引视图中显示图像。
答案 0 :(得分:0)
第1步 - 使用缓冲区。 第2步 - 获取base64代码后取消已保存图像的链接。
例如,请考虑以下代码段:
$im = new Imagick();
$im->setResolution(300,300);
$im->readimage('path_to_the_file.pdf');
$im->setImageFormat('jpeg');
$im->writeImages('file_name_to_save.jpg', false);
$im->clear();
$im->destroy();
$dest = imagecreatefromjpeg ('file_name_to_save.jpg');
//Step 1
ob_start();
imagejpeg($dest);
$image_data = ob_get_clean();
imagedestroy($dest);
$img_source = base64_encode($image_data);
//Step 2
unlink('file_name_to_save.jpg');
现在在$ img_source变量中,您可以使用图像的base64,如下所示:
'<img src="data:image/jpg;base64,'.$img_source.'" style="max-width: 100%; max-height:100%;" />';
答案 1 :(得分:0)
我正在使用类似的东西:
public function thumbAction() {
// Generate thumb from image & save it on disk
$image = $this->thumbnail(); // well can be anything that return Imagick
$this->response->setHeader('Content-Type', 'image/jpg');
echo $image;
}
无论如何,在上面的示例中,您不需要保存图像,只需将echo创建的拇指保存到用户。
此外,我正在将图像存储在某些路径上,例如thumbs/a/image.jpg
。我已经配置nginx来检查现有文件,如果文件不存在则调用Phalcon脚本。
在Phalcon应用程序中,我有一条路线指向上述行动的任何/thumbs*
路径。在第一次调用时,图像保存在路径thumbs/a/
上,因此在下一次调用时,Nginx服务器将返回该图像,而不是调用PHP。