2012-02-24 13 views
0

すべて、 画像をアップロードしてから表示用にサムネイルにしています。私は私のアップロードを処理するために、次のコードを使用しています:アップロードしてサムネイルにしたときに画像が歪んだ

$imageW = $blogOptions['image']['width']; 
$imageH = $blogOptions['image']['height']; 
$themePath = ABSPATH . 'wp-content/'; 
$path_to_image_directory = $themePath.'uploads/'; 
$path_to_thumbs_directory = $themePath.'uploads/thumbs/'; 
$fieldname = 'logo'; 

if(preg_match('/[.](jpg)|(gif)|(png)|(JPG)$/', $_FILES[$fieldname]['name'])) { 
$now = time(); 
$filename = $now."_".$_FILES[$fieldname]['name']; 
$source = $_FILES[$fieldname]['tmp_name']; 
$target = $path_to_image_directory . $filename; 
move_uploaded_file($source, $target); 

$file = $path_to_image_directory . $filename; 
$x = @getimagesize($file); 
switch($x[2]) { 
case 1: 
    $type = "gif"; 
    break; 
case 2: 
    $type = "jpeg"; 
    break; 
case 3: 
    $type = "png"; 
    break; 
default: 
    echo "error"; 
} 

if($type == "gif"){ 
$im = imagecreatefromgif($path_to_image_directory . $filename); 
}if($type == "jpeg"){ 
$im = imagecreatefromjpeg($path_to_image_directory . $filename); 
}if($type == "png"){ 
$im = imagecreatefrompng($path_to_image_directory . $filename); 
} 

$ox = imagesx($im); 
$oy = imagesy($im); 

$nx = $imageW; 
$ny = $imageH; 

$nm = imagecreatetruecolor($nx, $ny); 

imagecopyresized($nm, $im, 0,0,0,0,$nx,$ny,$ox,$oy); 

if(!file_exists($path_to_thumbs_directory)) { 
    if(!mkdir($path_to_thumbs_directory)) { 
     die("There was a problem. Please try again!"); 
    } 
} 

if($type == "gif"){ 
imagegif($nm, $path_to_thumbs_directory . $filename); 
}if($type == "jpeg"){ 
imagejpeg($nm, $path_to_thumbs_directory . $filename); 
}if($type == "png"){ 
imagepng($nm, $path_to_thumbs_directory . $filename); 
} 
} 
} 

アップロードが正常に動作し、私はそれは画像が極端に歪んで見えている表示すると、ファイルが正常しかし、作成されます。 Wordpressを使用してファイルのアップロードを処理し、サムネイルを作成すると、歪んで見えません。このファイルをアップロードするにはより良い方法がありますか、または画質を失わないために間違っていないことは何ですか?

ありがとうございます!

+0

どのように$ imageWと$ imageHを取得しますか? – Tchoupi

+0

スクリプトはイメージを拡大縮小していません。単純にサイズを変更しています。アスペクト比を維持するためにいくつかの数学を行います。 – Crashspeeder

+0

@マチュー私のWordpressブログには設定があり、私はそれらを引き出します。 – user1048676

答えて

1

あなたは、任意のスケーリングを行っていない - あなたは固定のサムネイルの幅と高さを持つようにしたい場合は、それが歪みます。

スケーリングを行うには、次の手順を実行します。

$original_width = imagesx($im); 
$original_height = imagesy($im); 

$scaling_factor = ($original_width/$desired_width); 
$new_width = $desired_width; 
$new_height = ($original_height/$scaling_factor); 

あなたは、新しいイメージを中央にして所望の高さ(背が高すぎる場合)にそれをトリミングする必要があると思います。短すぎる場合は、スケールを再調整する必要がありますが、スケーリング係数の高さを使用し、幅が広すぎる場合は中央と切り抜きを行います。

+0

ありがとうございます。もし私が必要ならば、イメージを再センタリングして切り取るのはどうすればいいですか?画像の幅は150になり、高さは100になります。 – user1048676

1

ソースサイズとデスティネーションサイズのアスペクト比が同じでない場合、画像は歪んで表示されます。あなたが好きなもの(実際にテストしていません)を使用して初期の作物を調整することができ

$oy = floor($ox * $ny/$nx); 
関連する問題