有没有用php编辑图像的好方法?

Posted

技术标签:

【中文标题】有没有用php编辑图像的好方法?【英文标题】:Is there a good way to edit images with php? 【发布时间】:2019-05-29 18:08:09 【问题描述】:

我目前正在尝试使用 php 脚本设置一个 html 库,该脚本会自动调整它们的大小并将它们放入库中。我现在的问题是大约有 30 张图片,并且:

    加载网站需要很长时间。 图像无法正确加载。那看起来像二进制的字符串?我不知道

这是我正在运行的唯一 php 代码:

<?php
            $directory = "images/gallery/feet";
            $images = glob($directory . "/*.jpg");

            foreach ($images as $image) 

              //getting the image dimensions
              list($width, $height) = getimagesize($image);

              //saving the image into memory (for manipulation with GD Library)
              $image = imagecreatefromjpeg($image);

              // calculating the part of the image to use for thumbnail
              if ($width > $height) 
                $y = 0;
                $x = ($width - $height) / 2;
                $smallestSide = $height;
               else 
                $x = 0;
                $y = ($height - $width) / 2;
                $smallestSide = $width;
              
              $thumbSize = 500;
              $thumb = imagecreatetruecolor($thumbSize, $thumbSize);
              imagecopyresampled($thumb, $image, 0, 0, $x, $y, $thumbSize, $thumbSize, $smallestSide, $smallestSide);

              imagejpeg($thumb, null, 100);

              echo "<div class=\"carousel-item\">";
              echo "<img class=\"d-block w-100\" src=\"$thumb\" />";
              echo "</div>";
            
            ?>

你知道我能做什么吗?

【问题讨论】:

见php.net/manual/en/function.imagejpeg.php#112796 【参考方案1】:

不要尝试在每次页面加载时为每个图像运行调整大小算法,这是一个非常昂贵的过程。

对每个文件运行一次 - 永远 - 并将缩略图粘贴到子目录中。

然后只需提供指向缩略图文件的链接,让您的网络服务器处理您的标题,以便正确呈现图像,而不是获取 base64 字符串。

类似

<?php
$directory = "images/gallery/feet";
$thmb_dir = $directory . "/thumbnail";
$images = glob($directory . "/*.jpg");

foreach ($images as $image) 

    if (/*thumbnail doesn't already exist*/) 

        //getting the image dimensions
        list($width, $height) = getimagesize($image);

        //saving the image into memory (for manipulation with GD Library)
        $image = imagecreatefromjpeg($image);

        // calculating the part of the image to use for thumbnail
        if ($width > $height) 
            $y = 0;
            $x = ($width - $height) / 2;
            $smallestSide = $height;
         else 
            $x = 0;
            $y = ($height - $width) / 2;
            $smallestSide = $width;
        
        $thumbSize = 500;
        $thumb = imagecreatetruecolor($thumbSize, $thumbSize);
        imagecopyresampled($thumb, $image, 0, 0, $x, $y, $thumbSize, $thumbSize, $smallestSide, $smallestSide);

        imagejpeg($thumb, null, 100);

        // Save this image w/ the same name in /thumbnails - I just made up this function name
        saveThumb($thumb, $thmb_dir);
    

    // Grab the thumbnail with the right name - another made-up function name
    $thumb_link = getThumbLink($image)

    echo "<div class=\"carousel-item\">";
    echo "<img class=\"d-block w-100\" src=\"$thumb_link\" />";
    echo "</div>";

?>

【讨论】:

您能解释一下标题的含义吗?有一次在我使用的代码 sn-p 中但导致了错误。 好吧,您得到了图像的 base64 代码,因为您没有告诉客户端该数据旨在作为图像处理。您需要告诉客户端它正在接收 base64 代码而不是图像文件的链接。参考这个问题:***.com/questions/8499633/… 通过标题,我的意思是您的浏览器默认情况下希望该图像标签包含文件的路径。如果您提供该链接,那么您的 Web 服务器可以处理定义内容类型 HTTP 标头,因此您无需担心发送 base64 并在图像源的开头指定 data:image/png;base64,

以上是关于有没有用php编辑图像的好方法?的主要内容,如果未能解决你的问题,请参考以下文章

用php保存javascript编辑的图像

PHP使用GD2库画图,图像无法输出解决方法

有没有用 GNU readline 处理多行输入的好方法?

我有一张图片,我想编辑该图片(放置文本等)并将该图片转换为 PDF。有没有一种简单的方法来做到这一点PHP?

“通过引用”编辑对象的好习惯?

有没有一种不用图像就可以用 HTML5 画布和 javascript 动态绘制云的好方法?