我有一张文件夹照片,上面有不同尺寸和质量的照片。他们都是jpg
我想通过所有这些并将jpg质量降低到80.无需更改尺寸和名称。然后将它们保存到同一文件夹中。
有一种简单的方法吗?
答案 0 :(得分:1)
如果您使用Linux,这很容易。使用照片在目录中运行以下脚本:
<?php
shell_exec('for i in *jpg; do convert -quality 80 $i s$i; mv s$i $i; done');
?>
答案 1 :(得分:0)
我正在使用这个功能......
function convertPNGto8bitPNG($ sourcePath,$ destPath){
$ srcimage = imagecreatefromjpeg($ sourcePath);
list($ width,$ height)= getimagesize($ sourcePath);
$ img = imagecreatetruecolor($ width,$ height);
$ bga = imagecolorallocatealpha($ img,0,0,0,127);
imagecolortransparent($ img,$ bga);
imagefill($ img,0,0,$ bga);
imagecopy($ img,$ srcimage,0,0,0,0,$ width,$ height);
imagetruecolortopalette($ img,false,255);
imagesavealpha($ img,true);
imagejpeg($ img,$ destPath);
imagedestroy($ IMG);
}
会降低图像质量。
调用此函数:::: convertPNGto8bitPNG('a.jpg','a1.jpg');
在这里你将从a.jpg看到你将在同一文件夹中获得a1.jpg ... 但根据您的要求,图片必须具有相同的名称,您必须使用
convertPNGto8bitPNG('a.jpg','a.jpg');
所以它将取代那张图片......
现在为文件夹中的所有图片编码
$directory = "img1/";
//get all image files with a .jpg extension.
$images = glob($directory . "*.jpg");
//print each file name
foreach($images as $image)
{
//echo $image;
convertPNGto8bitPNG($image, $image);
}
这里我的目录是img1 ... 你根据你改变了。
所以最终代码为.. ::
函数convertPNGto8bitPNG($ sourcePath,$ destPath){
$ srcimage = imagecreatefromjpeg($ sourcePath);
list($ width,$ height)= getimagesize($ sourcePath);
$ img = imagecreatetruecolor($ width,$ height);
$ bga = imagecolorallocatealpha($ img,0,0,0,127);
imagecolortransparent($ img,$ bga);
imagefill($ img,0,0,$ bga);
imagecopy($ img,$ srcimage,0,0,0,0,$ width,$ height);
imagetruecolortopalette($ img,false,255);
imagesavealpha($ img,true);
imagejpeg($ img,$ destPath);
imagedestroy($ IMG);
}
$directory = "img1/"; // change according to your dorectory name
//get all image files with a .jpg extension.
$images = glob($directory . "*.jpg");
//convert each file
foreach($images as $image)
{
//echo $image;
convertPNGto8bitPNG($image, $image);
}
注意:::我想告诉你的另一件事是你会尝试降低质量而不是图像容量,它会产生空白输出 这个代码运行的手段你必须有高质量的图像 否则你必须提出一些条件
答案 2 :(得分:0)
使用ImageMagick,只需使用mogrify
;其中,将覆盖更新质量的现有图像
mogrify -quality 80 *.jpg
如果您正在安装PHP支持Execution Operators,只需将上述命令包装在单引号中即可。
`mogrify -quality 80 *.jpg`
或者只使用Imagick包,如果有的话。
$images = glob('*.jpg');
foreach($images as $image)
{
$imgObj = new Imagick($image);
$imgObj->setImageCompressionQuality(80);
$imgObj->writeImage($image);
}