2012-02-23 14 views
2

アップロードした画像のサイズを150x150ピクセルに変更する画像アップロードスクリプトがあります。画像が四角い場合は素晴らしいですが、誰かが640x200ピクセルの画像をアップロードした場合、画像がきれいに見えません。php image resize - 中央からサムネイルを切り抜いたか?

私は基本的に画像の中心に基づいて四角いサムネイルを自動的に作成する必要があります。画像が広い場合は、左右の面を切り取る必要があります。イメージが高い場合は、上部と下部を切り取る必要があります。

私はここに正確には、オンラインのコード変更が見つかりました:

Upload, resize, and crop center of image with PHP

私はPHPと素晴らしいじゃないと私は私のコードを結合しようとしている、今は数時間のためにこれにしてきました下のオプションを使用してください。もし誰かが私を助けることができればそれは素晴らしいだろう:)

       $target_path = "avatars/"; 
     $image  = $_FILES['uploadedfile']['name']; 
     $target_path = $target_path . basename($_FILES['uploadedfile']['name']); 
     $_POST["userpic"]=$_FILES['uploadedfile']['name']; 
     if($_FILES['uploadedfile']['tmp_name']!="") { 
     $imagetype=explode(".",$_POST["userpic"]); 

     if($imagetype[1]=="jpg" || $imagetype[1]=="JPG" || $imagetype[1]=="gif" || $imagetype[1]=="GIF") 
     { 
     $target_path = "avatars/"; 
     $thaid=$_POST["user_id"]; 
     $target_path = $target_path .$thaid.".".$imagetype[1]; 
     $target_path2 =$thaid.".".$imagetype[1]; 
     move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path); 
     $_POST["userpic"]=$target_path2; 
     $n_width=$setts['avatar_width']; 
     $n_height=$setts['avatar_height']; 
     $tsrc=$target_path; 
     $add=$target_path; 

     if($imagetype[1]=="jpg" || $imagetype[1]=="JPG") 
     { 
     $im=imagecreatefromjpeg($add); 
     $width=imagesx($im); 
     $height=imagesy($im); 
     $newimage=imagecreatetruecolor($n_width,$n_height); 


     $ar = 1.00; 

    if ($ar < 1) { // "tall" crop 
$cropWidth = min($height * $ar, $width); 
$cropHeight = $cropWidth/$ar; 
    } 
    else { // "wide" crop 
$cropHeight = min($width/$ar, $height); 
$cropWidth = $cropHeight * $ar; 
    } 


     imagecopyresized($newimage,$im,0,0,0,0,$n_width,$n_height,$cropWidth,$cropHeight); 
     imagejpeg($newimage,$tsrc,100); 
     } 
     if($imagetype[1]=="gif" || $imagetype[1]=="GIF") 
     { 
     $im=imagecreatefromgif($add); 
     $width=imagesx($im);    
     $height=imagesy($im);    
     $newimage=imagecreatetruecolor($n_width,$n_height); 
     imagecopyresized($newimage,$im,0,0,0,0,$n_width,$n_height,$width,$height); 
     imagegif($newimage,$tsrc,100); 
     } 
     } 
     else 
     { 
     $_POST["userpic"]="noimage.jpg"; 
     } 
     } 

答えて

1

作物の領域の寸法を計算する計算は複雑ではありません。私はthis questionへの答えを与えました。これはあなたが作物地域のアスペクト比についてこれを計算できるようにします。正方形のサムネイルが必要なので、縦横比を1に設定する必要があります。

元の画像とサムネイルの寸法を知っていると、値を計算するのが簡単です。imagecopyresizedに渡す必要があります。

<?php 
$i = new Imagick(); 
$i->readImage($file); 
$i->cropThumbnailImage($w,$h); 

この方法で、あなたが実際に数学を心配する必要はありません:あなたはImageMagickのがインストールされている場合

+0

ありがとうございます!私はこれまでスクリプトを編集していましたが、中央に置くのではなく、左側から画像を切り取ることを除いて動作しています。私は何が欠けているすべてのアイデア? – user1227914

+0

ありがとうございます!私はこれまでスクリプトを編集していましたが、中央に置くのではなく、左側から画像を切り取ることを除いて動作しています。私は何が欠けているすべてのアイデア? – user1227914

+0

(私は上記のソースコードを編集しました) – user1227914

2

、あなたのような何かを行うことができます。

関連する問題