如何在html视图中显示由imagick php创建的图像?

时间:2015-08-19 09:46:28

标签: php html thumbnails phalcon imagick

我正在使用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对象,但无法继续在索引视图中显示图像。

2 个答案:

答案 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。