2017-07-17 12 views
0

私は以下のphp image関数を使用して画像をアップロードしたり、ページに画像を表示しているときにサイズを変更していますが、元の画像のサイズを変更しようとしたとき、私が望む実際の次元。PHPの画像リサンプリング寸法の問題

例:私は180 X 180にサイズを変更するつもりが、それは私が180と高さ120幅た元画像の幅は600で、高さは400 です。誰にも問題がどんなものか分かりませんか?

<?php 
function CroppedThumbnail($imagename, $meta, $newpath, $imgwidth, $imgheight, $rename, $imgQuality){ 
// Set a maximum height and width 
    $width = $imgwidth; 
    $height = $imgheight; 
    $url = ''; 
//Get image info 

    $info = @getimagesize($imagename); 
    $fileparts = pathinfo($imagename); 
// Get new dimensions 
    $imageAvatar = substr($fileparts['filename'],0,5) . '-' . $imgwidth . 'x' . $imgheight . '.png'; 
    if(is_dir($newpath . '/') && file_exists($newpath . '/' . $imageAvatar)){ 
     return $url . $newpath . '/' . $imageAvatar; 
    }else{  
    list($width_orig, $height_orig) = $info; 
    $ratio_orig = $width_orig/$height_orig; 
    if ($width/$height > $ratio_orig) { 
     $width = $height*$ratio_orig; 
    } else { 
     $height = $width/$ratio_orig; 
    } 
// Resample 
    if ($info['mime'] == 'image/jpeg'){ 
     $image = imagecreatefromjpeg($url.$imagename); 
    } 
    else if ($info['mime'] == 'image/gif'){ 
     $image = imagecreatefromgif($url.$imagename); 
    } 
    else if ($info['mime'] == 'image/png'){ 
     $image = imagecreatefrompng($url.$imagename); 
    } 
    $image_p = imagecreatetruecolor($width, $height); 
    imagecopyresampled($image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig); 
//Rename the image 
    if($rename == true){ 
     $newName = substr($fileparts['filename'],0,5) . '-' . $imgwidth . 'x' . $imgheight; 
     $newFileName = $newpath . '/' . $newName . '.png'; 
    }else{ 
     $newFileName = $newpath . '/' . $imagename; 
    } 
// Output 
    imagejpeg($image_p, $newFileName, $imgQuality); 
    return $url . $newFileName; 
    } 
} 
+0

600/400 = 1.5および180/120 = 1.5である。あなたの画像を180x180に変換すると、あなたは本当に良く見えない画像を得るでしょう。 – Danielius

+0

@Danieliusはいはいですが、ユーザーが任意の次元の画像をアップロードしていて、180x180が必要なため、何をすべきか分かりません。私はまた、彼らが実際のサイズを取得する方法を知らないので、彼らが選択する任意の画像を拒否することができます – Peter

+0

フィリップ、ああ、私は理解しています。 – Danielius

答えて

0

イメージの元の縦横比を維持しているためです。あなただけのこれらの行を削除し、アスペクト比を維持したくない場合は

$ratio_orig = $width_orig/$height_orig; 
if ($width/$height > $ratio_orig) { 
    $width = $height*$ratio_orig; 
} else { 
    $height = $width/$ratio_orig; 
} 

これは、次のコード行です。

+0

それは良い、それは感謝しました – Peter