1

我有一个问题,我认为很容易解决,但结果比预期的要困难一些。

我正在一个网站上工作,有人可以为产品上传图片,它会即时调整它们的大小两次(500x500 和 150x150)。我试图保持纵横比,例如,如果我有 600x500 的图像,它将调整为 500x417 和 150x125。

我找到了(很多)执行此操作的代码,例如此类但是我总是遇到内存问题。我认为该类在调整大小后不会卸载/销毁临时图像。

我让主机将我的内存限制从 32 升级到 64M,但是后来我的内存用完了。我也坚持使用 PHP 5.2.13,所以我没有垃圾收集器。

我的 PHP 相当新,所以对我来说类的工作方式非常陌生,否则我会尝试在需要的地方添加 imagedestroy() 函数。我摆弄了几个小时的链接课程,但没有成功。

任何人都可以:

- 指向一个魔术类的方向,该类在调整大小完成后保持纵横比以及卸载/销毁临时图像,以控制 RAM 使用?

-给我一些(非常需要!)指导我可以在哪里以及如何修改一个类(例如发布的类)以销毁临时图像。

- 告诉我,如果我要解决这个非常错误的问题?

哦,我曾经让 WideImage 类工作,它工作得很好,然后突然停止了。我花了几个小时试图修复它,但没有成功。

我的 PHP 安装有 GD,但没有 ImageMagick。

谢谢!

4

3 回答 3

1

好吧,我设法解决了我自己的问题。

我坐下来,擦掉所有调整大小的代码,从头开始,写了这个很棒的小函数来做我需要的事情。

function resizeimage($targetw, $targeth, $input, $savedest) {
    list($oldw, $oldh) = getimagesize($input);
    $imgratio = ($oldw / $oldh);
     if ($imgratio>1) { 
         $new_width = $targetw; 
         $new_height = ($targeth / $imgratio); 
     } else { 
         $new_height = $targeth; 
         $new_width = ($targetw* $imgratio); 
     }
  $imagetemp = imagecreatetruecolor($new_width, $new_height);
  $imageorig = imagecreatefromjpeg($input);
  imagecopyresampled($imagetemp, $imageorig, 0, 0, 0, 0, $new_width, $new_height, $oldw, $oldh);
  imagejpeg($imagetemp, $savedest, 95);
  imagedestroy($imageorig);
  imagedestroy($imagetemp);
  unset($oldw,$oldh,$imgratio,$new_height, $new_width, $imagetemp, $imageorig);
}

输入目标宽度和高度,以及输入图像的位置(例如“uploads/images/testimage.jpg”),以及您希望保存它的位置(“uploads/images/resizedtestimage.jpg”)。

希望这个片段可以帮助将来的人!

于 2012-05-24T03:59:45.580 回答
0

以下是一些 GD 图像处理示例: http: //fdcl.svn.sourceforge.net/viewvc/fdcl/trunk/modules/imageprocessing/gd/module.inc?revision=212 &view=markup

一种方法是这种技术:

  • 打开图像缩放到 500
  • imagedestroy($this->original_image)
  • 使用缩放到 500 并缩小到 150 的图像
  • imagedestroy($this->image500)
  • imagedestroy($this->image150)

最后一个想法是使用任何可用的命令行工具为您调整大小。

于 2012-05-23T14:56:08.657 回答
0

我做过类似的事情,但使用了 2 个可以从 Linux 服务器上的命令行运行的应用程序。

ImageMagick Mogrify:http ://www.imagemagick.org/www/mogrify.html

mogrify -resize 750 "image.jpg" 

将调整为 750 像素宽

jpegoptim:http ://freecode.com/projects/jpegoptim

jpegoptim "image.jpg" –max=70 --strip-all

将 jpeg 优化到 70% 并从图像中去除所有不必要的膨胀。

两者都从 CLI 运行并提供许多命令选项,确保您可以轻松使用其中一个或两个。

于 2012-05-23T15:36:18.700 回答