4

私は現在、PHPを使用してサーバーに複数の画像をアップロードしてサイズを変更できるフォームを取得しようとしています。クライアントによってアップロードされた各画像のサイズは約2.5MBです。

現在、このmove_uploaded_file()機能を使用しています。

ファイルをサーバーに移動するのに問題はありません。トリミングしようとすると問題が発生します。ホストにImageMagickがないので、このセットアップを使用しています(すべてのコードが関連するものだけではなく、これはループ内にあり$width、さまざまな作物サイズに合わせて変更されます)

$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
imagejpeg($image_p, $output_filename, 80);

現状では、これは2つの画像に対してのみ機能します。送信されたものが3つ以上ある場合、「メモリが使い果たされました」というエラーが発生します。私のメモリ制限は120mbなので、これを調査しました。どうやら、このimagecreatefromjpeg関数は大量のメモリを使用しているようです。特に、ファイルの解像度が大きい場合はそうです(私の場合はそうです。したがって、トリミング/サイズ変更が必要なのはなぜですか)。

このタスクへのより効率的なアプローチを知っている人はいますか?私はグーグルで研究しましたが、誰もが私と同じテクニックを使用しています。

4

1 に答える 1

5

imagedestroyを使用して、 $image および $image_p に関連付けられたすべてのメモリをクリアします。

$image_p = imagecreatetruecolor($width, $height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig);
imagejpeg($image_p, $output_filename, 80);
imagedestroy($image);
imagedestroy($image_p);
于 2012-01-12T18:16:08.180 に答える