2012-02-24 8 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

@Mathieu 내 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); 
관련 문제