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


How to display an image created by imagick php in html view?

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

步骤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%;" />';

我用的是类似的东西:

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;
}

无论如何,在上面的例子中,你不需要保存图像,只需要将创建的拇指回显给用户。

我还将图像存储在一些路径上,如thumbs/a/image.jpg。我已经配置nginx检查现有的文件,如果文件不存在,它调用Phalcon脚本。在费尔康应用程序,我有一个路线,指向任何/thumbs*路径以上行动。在第一次调用图像保存在路径thumbs/a/,所以在下一次调用Nginx服务器返回该图像,而不是调用PHP。