【问题标题】:How to display an image created by imagick php in html view?如何在 html 视图中显示由 imagick php 创建的图像?
【发布时间】:2015-11-12 13:05:47
【问题描述】:

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

【问题讨论】:

    标签: php html thumbnails phalcon imagick


    【解决方案1】:

    第 1 步 - 使用缓冲区。 第 2 步 - 获取 base64 代码后取消链接已保存的图像。

    例如考虑以下代码sn-p:

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

    【讨论】:

    • 在这里使用imagecreatefromjpegimagejpeg 似乎很荒谬。您已经得到保存在名为file_name_to_save.jpg 的文件中的数据,那么为什么不直接从那里读取呢?即使这样也可能是不必要的——Imagick::__toString 也存在。
    【解决方案2】:

    我正在使用类似的东西:

    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 脚本。 在 Phalcon 应用程序中,我有一条指向上述操作的任何 /thumbs* 路径的路线。在第一次调用时,图像保存在路径thumbs/a/ 上,因此下次调用 Nginx 服务器返回该图像而不是调用 PHP。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-19
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      相关资源
      最近更新 更多