2011-01-09 4 views
0

이미지 크기가 604x453을 초과하면 604x453으로 크기를 조정하고 싶습니다.PHP : ..px 이상인 경우

필자는 여기까지 만들어 :

$org_name = stripslashes($_FILES[$upload_name]['name']); 
    $file_size = $_FILES[$upload_name]['size']; 
    $file_temp = $_FILES[$upload_name]['tmp_name']; 
    $file_type = $_FILES[$upload_name]["type"]; 
    $file_err = $_FILES[$upload_name]['error']; 
list($width, $height, $type, $attr) = $imageSizeInfo; 
    $move_me = "images/users/status/".$org_name; 
if(move_uploaded_file($file_temp, $move_me)) { 
    echo "{"; 
    echo  "msg: '".$org_name."'"; 
    echo "}"; 
} 
if($width > 604 && $height > 453) { 
$jpeg_quality = 90; 
$src = "images/users/status/".$org_name; 
$ext= pathinfo($src, PATHINFO_EXTENSION); 
$targ_h = 453; 
$targ_w = 604; 
$path_thumbs = "images/users/status/"; 
$thumb_path = $path_thumbs . '/' . $newfilename; 

if($ext == "jpg" OR $ext == "jpeg" OR $ext == "JPG"){ 
    $img_r = imagecreatefromjpeg($src); 
}elseif($ext == "png" OR $ext == "PNG"){ 
    $img_r = imagecreatefrompng($src); 
}elseif($ext == "gif" OR $ext == "GIF"){ 
    $img_r = imagecreatefromgif($src); 
} 
$dst_r = ImageCreateTrueColor($targ_w, $targ_h); 

imagejpeg($dst_r,$thumb_path,$jpeg_quality); 

unlink($move_me); 
} 

그래서 일단 원래 크기와 모든 것을 사용하여 파일을 업로드 한 다음 치수를 확인하고 크기를 조정하고, 링크 해제는 (제거) 후 원래 하나를 ..

지금 내가 무엇을 잘 모릅니다 만, 어떻게 든 크기 조정 과정에서 그것이 잘못하고 난 단지 차원에서 검은 색 사각형을 얻을 출력으로 604x453 ..

내가 그리워 했는가

은, 내가 어떻게이 문제를 해결할 수 ?

imagecopyresampled($dst_r, $img_r, 0, 0, 0, 0, $targ_w, $targ_h, $width, $height); 

imagecopyresampled()의 PHP 설명서를 참조하십시오 : 당신의 ImageCreateTrueColorimagejpeg 라인 사이

+0

더 많은 입력 필터링을 한 다음 파일 이름에 "stripslashes"를 사용하는 것을 고려해야합니다. – berkes

+0

@Berkes, 의견을 주셔서 감사합니다. 무엇을 더해야합니까? – Karem

답변

2

, 당신이 뭔가를해야합니다.

이전 코드는 본질적으로 정확한 크기의 빈 캔버스를 작성한 후 그로부터 "검은 색 사각형"을 작성했습니다.

또한 파일 확장자를 사용하는 대신 업로드 된 이미지 유형을 확인하려면 getimagesize()을 사용해야합니다.

인덱스 2는 화상의 형태를 나타내는 IMAGETYPE_XXX 상수 중 하나이다.

그 이유는 이미지가 file.jpg라고하는 업로드되는 것을 완벽하게 그럴듯이다, 그러나 실제로 .png 파일 - getimagesize() 그것이 무엇인지 형식을 결정하기 위해 이미지 내부의 바이트를 검사합니다.

+0

exif_imagetype으로 확인하면 어떨까요? – Karem

+0

@Karem : 저는'exif_imagetype'을 직접 사용해 본 적이 없지만 설명서에서 "이미지의 첫 번째 바이트를 읽고 그 서명을 확인합니다"라고 사용하는 것이 좋습니다. 편집 : "반환 값은 지수 2에서 getimagesize()가 반환하는 값과 같지만 exif_imagetype()은 훨씬 빠릅니다." 당신은 이미'getimagesize'를 어딘가에서 호출하고있을 것입니다 ('$ imageSizeInfo'는 어디에서 왔습니까?), 아마도 그렇게 붙어 있어야합니다. – thirtydot

관련 문제