有没有用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编辑图像的好方法?的主要内容,如果未能解决你的问题,请参考以下文章