0

質問が編集されました

以下は、ユーザーが写真をアップロードできるようにする簡単なスクリプトです。アップロードが完了すると、写真は170px(h) x 150px(w) のサムネイルとして表示されます。

ほとんどの写真はサイズを変更すると歪んで見えるので、拡大縮小も必要だと思います

新しい画像のサイズを保存することに行き詰まっています。TODO を参照してください。

<?php 

if ($_SERVER["REQUEST_METHOD"] == "POST") 
{

    $maxWidth  = 150;
    $maxHeight = 170;

    $name = $_FILES ['image'] ['name'];
    $type = $_FILES ["image"] ["type"];
    $size = $_FILES ["image"] ["size"];
    $tmp_name = $_FILES ['image'] ['tmp_name']; 
    list($originalWidth, $originalHeight) = getimagesize($tmp_name);



  if ($originalWidth > $maxWidth || $originalHeight > $maxHeight)
  {
      if ($originalWidth / $maxWidth > $originalHeight / $maxHeight) 
      {
       // width is the limiting factor
       $width = $maxWidth;
       $height = floor($width * $originalHeight / $originalWidth);
      } else { 
        // height is the limiting factor
        $height = $maxHeight;
        $width = floor($height * $originalWidth / $originalHeight);
  }


   // Resample 
   $image_p = imagecreatetruecolor($maxwidth, $maxheight);
   $image = imagecreatefromjpeg($filename);
   imagecopyresampled($image_p, $image, 0, 0, 0, 0, $maxwidth, $maxheight,  
   $originalWidth, $originalHeight);

    TODO: how do I save the new dimensions to $location ?

//start upload process
$RandomNumber = uniqid();
$location = "uploads/$RandomNumber";
move_uploaded_file($tmp_name, $location);   
query("UPDATE users SET profilepic = '".$location."' WHERE id = '$id'"); 


}
?>

私のコードのいくつかは、この質問から着想を得ています:

PHPで歪んだ画像のサイズ変更

4

2 に答える 2

1

あなたの質問については、「ユーザーがアップロードしたい写真の初期サイズを取得するにはどうすればよいですか?」

マニュアルから:

list($width, $height, $type, $attr) = getimagesize("img/flag.jpg");

それを念頭に置いて、上記の例のファイル パスを $_FILES["image"] に置き換えて、寸法データを取得できる場合があります。

元の寸法を取得したら、元の縦横比を維持しながら画像を小さく調整できます。

エラー チェックの場合、おそらく $_FILES["image"] にファイルが 1 つしかないことを確認するか、各画像の HTML 入力タグに同じ名前を使用して複数の画像をアップロードできるようにするには、配列をループします。 .

于 2013-10-22T23:45:04.553 に答える
0

プロジェクトでこれを行うのに役立つカスタム クラスがあります。私のコードを自由に使用してください: https://gist.github.com/695Multimedia/7117003

于 2013-10-23T11:51:04.340 に答える