ユーザーが画像をアップロードし、その画像を「元のコピー」としてディレクトリに保存できるようにしようとしています
public_html/data/user_images/yyyy/MM/dd/guid.ext
次に、GD を使用して、イメージの複数のコピーをさまざまなサイズで作成し、ファイル システム内の別の動的な場所に保存します。
public_html/data/user_images/width/yyyy/MM/dd/guid.ext
GD ライブラリを使用して操作された画像を保存する前に、ファイルが既に存在している必要があると思わせる次のエラーに遭遇し続けます。
imagejpeg(/data/user_images/200/2013/05/21/9714624e10eed645e822babd0acccf69ac421d59.png):
failed to open stream: No such file or directory
相対パスと絶対パスの両方で同じエラーが発生します。このディレクトリまたはファイルが存在しないことはわかっています。アップロードされた画像の元のコピーを保存すると、コードは期待どおりに機能しますが、動的ディレクトリに新しい画像を作成することはできません。
以下は私の画像ヘルパーのコードです。パラメータとして、元の保存された画像の場所、サイズの配列、および新しい画像のファイル名を取ります。createDirectories 関数は、動的に作成された絶対パスと相対パスを含む配列を返します。
public static function create_sizes($image, $sizes, $filename){
$current_size = GetimageSize($image);
$urls = array();
switch(strtolower($current_size['mime'])){
case 'image/png':
$image_original = imagecreatefrompng($image);
break;
case 'image/jpeg':
$image_original = imagecreatefromjpeg($image);
break;
case 'image/gif':
$image_original = imagecreatefromgif($image);
break;
default: die();
}
foreach($sizes as $width){
$directories = self::createDirectories('user_images/'.$width);
$aspect_ratio = $current_size[0] / $current_size[1];
$height = (int) ($width / $aspect_ratio);
$photoX = ImagesX($image_original);
$photoY = ImagesY($image_original);
$image_new = ImageCreateTrueColor($width, $height);
ImageCopyResampled($image_new, $image_original, 0, 0, 0, 0, $width+1, $height+1, $photoX, $photoY);
ImageJPEG($image_new, $directories['absolute'].$filename, 100);
array_push($urls, $directories['relative'].$filename);
}
ImageDestroy($image_original);
ImageDestroy($image_new);
return $urls;
}