2010-01-18 8 views
1

나는 사용자 프로필 이미지를 잘라 작은 사용자 정의 드루팔 모듈을 가지고있다. http://5oup.net/sites/default/files/profile_pictures/405/t_Photo_8.jpgPHP 이미지 자르기 오류

및 원본 파일 : 잘못 갈 수있는 어떤 http://5oup.net/sites/default/files/profile_pictures/405/Photo_8.jpg

어떤 생각이 여기에

는 문제의 예입니다? 내 추측은 imagecreatetruecolor() 라인 주변에있는 것입니까? 사전에

감사

제임스

편집

나는 지금이에서 발생했습니다 정말로 확실 해요 있도록 orginal 한 사용자 이미지로 오류를 재현 할 수없는 것 케이스! 이 지금 또한 오류의 원인이 될 수 실현 사전 작물 이미지 업로드 기능은, 그래서 전체 공개의 이익 :

if(isset($_POST['form_sent'])) 
{ 
    $imageFile = $_FILES['image']['tmp_name']; 
    $filename = basename($_FILES['image']['name']); 
    $filename = preg_replace("/[^A-Za-z0-9 .]/", '', $filename); 
    $filename = str_replace(" ", '_', $filename); 

    $filename = urlencode($filename); 

    $img_info = getimagesize($imageFile); 

    if (filesize($imageFile) > 510000) { 
     drupal_set_message('Image too large. Please upload a file 500kb or less.', 'error'); 
     $image_form = '<a href="/avatar">Choose a different image</a>'; 
     $output = array(
      'image_form' => $image_form 
     ); 
     return serialize($output); 
    } 

    list($width, $height) = getimagesize($imageFile); 

    switch ($img_info['mime']) { 
     case 'image/png': 
     $src = imagecreatefrompng($imageFile); 
     break; 

     case 'image/jpeg': 
     case 'image/jpg': 
     $src = imagecreatefromjpeg($imageFile); 
     break; 

     case 'image/gif': 
     $src = imagecreatefromgif($imageFile); 
     break; 

     default: 
     drupal_set_message('File type not allowed. Please upload a jpg, gif or png.', 'error'); 
      $image_form = '<a href="/avatar">Jpg, gif or pngs only</a>'; 
      $output = array(
       'image_form' => $image_form 
      ); 
      return serialize($output); 
     break; 
    } 

    $orig_h = ($height/$width)* $orig_w; 

    $tmp = imagecreatetruecolor($orig_w, $orig_h); 
    imagecopyresampled($tmp, $src, 0,0,0,0,$orig_w,$orig_h,$width,$height); 
    imagejpeg($tmp, $folder.$filename, 100); 

    imagedestroy($tmp); 
    imagedestroy($src);  


} 
+0

코드 앞에 'ini_set ('gd.jpeg_ignore_warning ', 1);을 추가하면 어떻게됩니까? –

+0

나는 그것을 제공했다, 흥미롭게도 나는 제공된 이미지로 오류를 재현 할 수 없다 (편집 된 질문 참조). –

+0

imagecache 모듈은 어떻습니까? 바퀴를 재발 명할 필요가 없습니다 .. – tpow

답변

0

파일이 존재하지 않습니다. 첫 번째 함수는 공백이 있으면 파일의 이름을 변경 한 다음 크기 조정 함수에 전달합니다.

그러나 스케일링 기능에서 파일 이름을 포스트 이름 (업로드 된 파일)으로 재설정합니다. 따라서이 함수는 존재하지 않는 파일 (이름이 변경 되었기 때문에)을 찾은 다음 사용자가 만든 검정색 트루 컬러를 반환합니다.

파일 이름을 포스트 기능 (원래 기능의 두 번째 줄)으로 재설정하는 코드를 없애면됩니다. 또한 축소판을 만들기 전에 is_file 검사를 수행합니다.

+0

답장을 보내 주셔서 감사합니다! 이러한 함수는 diffent 페이지에서 호출되므로 첫 번째 파일 이름이 숨겨진 양식 값으로 두 번째 파일로 전달 된 다음 $ _POST [ 'filename']을 사용하여 다시 검색됩니다. 또한 내가 말했듯이 대부분의 경우처럼 작동하지만 가끔씩 오류가 발생합니다. –

+0

그러나 공백이있는 일반적으로 파일이 작동하지 않는 시대가 있습니까? 나는 is_file을 시도해보고 복제가 가능하다면 문제가되는지를 알기 위해 오류를 반환한다. – Cryophallion

+0

Unfortunatley 문제를 재현 할 수 없습니다 (편집 된 질문 참조). 문제를 나타내는 파일 전후에 대한 예가 있습니다. 오류 파일에 공백이있을 가능성이 있기 때문에 is_file() 제안을 제공하고 다시보고 할 것입니다. –