【问题标题】:Resize image to approximate number of pixels将图像大小调整为近似像素数
【发布时间】:2013-12-17 08:48:07
【问题描述】:

我想防止添加到电子邮件附件中的 JPG 图像大小为 250kB 或更小。我发现,对于 JPG 图像,这是非常非线性的,所以我做了一些测试,并确定我可以允许的最大像素为 2000000。

所以现在,我需要将每个图像的大小调整为 2000000 像素或尽可能接近的值。然而,这听起来很不可能:

x2*y2 = 2000000
x2/y2 = x/y      //The aspect ratio must be the same

那么有什么解决办法呢?

我对这个问题的看法:

  1. 对于NxN 图像,比率等于1。(当然是N=N
  2. 对于 9 个像素和比率 1:x = y = sqrt(9) = 3
  3. 对于NxM 图像,其中N!=MM∨N=1 的比率为1/M 或N/1。对于p 像素,图像将具有x=p y=1 或反之亦然。

3.我知道X和Y都是1sqrt(p)之间的值。

【问题讨论】:

  • 您想将较大的图片重新处理成较小的图片,还是只是阻止用户上传超过您的大小限制的图片?
  • 只有较大的图像才能调整大小。是的,它们必须调整大小,而不是拒绝。
  • 感谢您的评论,但我知道如何在 PHP 中调整图像大小。您可能已经注意到,imagecopyresized 需要两个图像的宽度和高度,而不仅仅是源。

标签: php image-processing resize


【解决方案1】:

所以,毕竟another board 上有一个答案(因为你们在 SO 上显然不会做数学)。

这就是方程的程序实现的样子:

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
}

【讨论】:

    【解决方案2】:

    根据您的喜好制作一个像素过多且字节数过多的随机图像:

    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年?

    【讨论】:

      猜你喜欢
      • 2020-02-26
      • 2014-11-15
      • 2020-07-10
      • 2019-04-18
      • 2014-06-02
      • 2013-08-12
      • 1970-01-01
      • 1970-01-01
      • 2013-02-20
      相关资源
      最近更新 更多