2012-12-06 7 views
0

저는 며칠 동안 이것을 알아 내려고 노력했습니다. 이미지를 업로드하고 정사각형으로 자르고 300x300 크기로 조정 한 다음 150x150으로 크기를 조정하고 'uploads/products/$ id /'폴더에 업로드 한 다음 파일 경로를 mysql 데이터베이스로 이동해야합니다.php imagecreatefrom 결과가 검은 색입니다.

그러나 검은 색 이미지가 계속 출력됩니다. 이 스크립트에 무슨 문제가 있습니까?

$ext = explode('.', $_FILES['image1']['name']); 
$extension = $ext[1]; 
$target_path = 'uploads/products/'.$id.'/'; 
$filename = 'featuredpic.'.$extension; 

$featured100_full_path = $target_path.$filename; 

if(!is_dir('../../../uploads/products/'.$id)){ 
    mkdir('../../../uploads/products/'.$id, 0777); 
} 

if(file_exists('../../../'.$featured100_full_path)) { 
    chmod('../../../'.$featured100_full_path, 0755); 
    unlink('../../../'.$featured100_full_path); 
} 

if(!move_uploaded_file($_FILES['image1']['tmp_name'], '../../../'.$featured100_full_path)){ 
    echo 'Error: Image Not Uploaded!'; 
} 

if($extension=="jpg" || $extension=="jpeg"){ 
$uploadedfile = $_FILES['image1']['tmp_name']; 
$src = imagecreatefromjpeg($uploadedfile); 
    } 
else if($extension=="png"){ 
$uploadedfile = $_FILES['image1']['tmp_name']; 
$src = imagecreatefrompng($uploadedfile); 
} else { 
$src = imagecreatefromgif($uploadedfile);} 

list($width, $height) = getimagesize($filename); 
$newwidth = 300; 
$newheight = 300; 
$featured300 = imagecreatetruecolor($newwidth, $newheight); 

$newwidth1 = 150; 
$newheight1 = 150; 
$featuredthumb = imagecreatetruecolor($newwidth1, $newheight1); 

imagecopyresampled($featured300,$src,0,0,0,0,$newwidth,$newheight,$width,$height); 
imagecopyresampled($featuredthumb,$src,0,0,0,0,$newwidth1,$newheight1,$width,$height); 

$filename_featured300 = 'uploads/products/'.$id.'/featured300.'.$extension; 
$filename_featuredthumb = 'uploads/products/'.$id.'/featuredthumb.'.$extension; 

imagejpeg($featured300, '../../../'.$filename_featured300,100); 
imagejpeg($featuredthumb, '../../../'.$filename_featuredthumb,100); 

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

답변

0

이 기능은 가능성이 검은 색 이미지에 대한 이유입니다 : http://php.net/manual/en/function.imagecreatetruecolor.php

나는 개인적으로이 기능의 확보 및 예상 뭔가를하고 각각의 수정 과정을 통해 단계 것, 나는이 많이 인정해야 코드가 위험하다 :

$ext = explode('.', $_FILES['image1']['name']); 
$extension = $ext[1]; 

당신은 파일 확장자에 너무 많은 신뢰를 배치, 이것은 안전 : http://php.net/manual/en/function.finfo-file.php

,

그러나 추가 PECL 확장이라는 점을 알고 있습니다. 왜 당신이 도트에서 폭발을 선택했을지 이해할 수 있습니다. 파일 업로드, 디렉토리 구조 등을 위해 래퍼를 작성하지 않고 코드를 디버깅하는 것은 매우 어렵습니다.

힌트 : 이미지를 확장자가있는 임시 디렉토리로 이동하여 각 파일을보기 위해 계속 이동하십시오. 변환 체인의 단계 - 결함을 빨리 식별해야합니다! 희망이 도움이되고, 더 유용 할 수 없다는 것을 유감스럽게 생각합니다.

관련 문제