我想阻止添加到电子邮件附件的JPG图片为250kB或更小。我发现,对于JPG图像,这是非线性的,所以我做了一些测试,并确定2000000像素是我允许的最大值。
所以现在,我需要将每个图像的大小调整为2000000pixels或尽可能接近值。但这听起来很不可能:
x2*y2 = 2000000
x2/y2 = x/y //The aspect ratio must be the same
那么解决方案是什么?
我对这个问题的看法:
NxN
图片,比率等于1.(当然N
= N
)x = y = sqrt(9) = 3
NxM
图片,其中N!=M
和M∨N=1
的比例为1 / M或N / 1。对于p
像素,图片将具有x=p
y=1
,反之亦然。从 3点开始。我知道X和Y都是1
和sqrt(p)
之间的值。
答案 0 :(得分:0)
所以,毕竟,another board上有一个答案(因为你们这里的人显然不做数学)。
这就是方程式的实现方式:
function image_resize_to_pixel_count($im, $pixels) {
$x = imagesx($im);
$y = imagesy($im);
$S = $pixels; //I use S here to remind you, that it's analogic to rectangle area
//Define the coefficient for $x, $y (old image dimensions)
$h = sqrt($S/($x*$y));
$x2 = round($h*$x);
$y2 = round($h*$y);
//Standard resize to x, y procedure follows from here
}
答案 1 :(得分:0)
制作一个随机的图像,该图像具有太多像素和太多字节供您使用:
convert -size 3000x1000 xc:red +noise random image.jpg
检查大小,可以,超过10MB
-rw-r--r-- 1 mark staff 10454067 9 Jan 12:03 image.jpg
现在,在保留像素尺寸的同时减小到250kB:
convert image.jpg -define jpeg:extent=250k result.jpg
检查文件大小(以字节为单位),是的,现在大约250kB:
-rw-r--r--@ 1 mark staff 259356 9 Jan 12:08 result.jpg
或者缩小像素尺寸,直到像素总数低于2,000,000:
convert image.jpg -resize 2000000@ result.jpg
检查尺寸,是的,在2,000,000像素以下并且仍以3:1的相同比例
identify result.jpg
result.jpg JPEG 1732x1154 1732x1154+0+0 8-bit sRGB 2.70352MiB 0.000u 0:00.000
看,我们可以做数学-慢慢来!!!什么是5年?