2013-02-18 1 views
0

그래서이 수업은 반은 작동합니다. 어쨌든 업로드 된 이미지의 크기가 조정 된 샘플을 복사 할 수 없으며 "정확한"크기의 검정색 사각형 만 나타납니다 (엄지 손가락이 위로 오게되면 크기를 고정하십시오. 시각).php imagecopyresized() full black thumbnail

WOT를 유감스럽게 생각하지만 크레이크 레이를 몰고 간다. 미리 감사드립니다.

<?php 
    class Upload { 
#function from http://stackoverflow.com/a/10666106/587811 
public function resize_values($origWidth,$origHeight,$maxWidth = 200,$maxHeight = 200){ 
    #check for longest side, we'll be seeing that to the max value above 
    if($origHeight > $origWidth){ #if height is more than width 
     $newWidth = ($maxHeight * $origWidth)/$origHeight; 
     $retval = array(width => $newWidth, height => $maxHeight); 
    } 
    else{ 
     $newHeight= ($maxWidth * $origHeight)/$origWidth; 
     $retval = array(width => $origWidth, height => $newHeight); 
} 
    return $retval; 
} 
public function image($picurl, $file, $path="images/uploaded/") { 
    echo "function chamada!"; 
    if ($picurl) { 
     $picFileName=rand(1,9999).$_SESSION['id']; 
     $picExt=substr(strstr($picurl,'.'),1,3); 
     $picExt=strtolower($picExt); 
     $allowed = array("jpg","png","gif","bmp"); 
     if (in_array($picExt,$allowed)) { 
      if (getimagesize($file)) { 
       $picNewName=str_replace(" ","_",$picFileName.'.'.$picExt); 
       $picWhereTo=$path.$picNewName; 
       $copy=move_uploaded_file($file, $picWhereTo);  
       if ($copy) { 

        list($width, $height) = getimagesize($picWhereTo); 
        $size = $this->resize_values($width,$height,250,250); 
        $thumb = imagecreatetruecolor($size['width'],$size['height']); 
    imagealphablending($thumb, false); 
        $source = imagecreatefromjpeg($picWhereTo); 
        imagecopyresized($thumb,$source,0,0,0,0,$size['width'],$size['height'],$width,$height); 
        $picNewName=$picFileName.'_thumb.'.$picExt; 
        imagejpeg($thumb,$path.$picNewName); 

        $picinfo['where']=$picWhereTo; 
        $picinfo['name']=$picNewName; 
        return $picinfo; 
       } 
       else return false; 
      } 
      else return false; 
     } 
     else return false; 
    } 
} 
    } 
    ?> 
+0

대신 imagecopyresized 이미지 복사 사용 – zamil

+0

작동하지 않았습니다. – MoshMage

답변

1

이와 비슷한 문제가 발생했습니다. 이것은 투명성이있는 png와 관련이 있습니다.

imagecreatetruecolor()를 사용하여 $ thumb을 만든 후에이 사진을 찍어주세요.

imagealphablending($thumb, false); 

나는 이것이 해결책이라고 확신하지 않는다. 그러나 나는 올바른 길을 따라 가고 있다고 생각한다. 트루 컬러는 알파 블렌딩을 지원하며 JPEG의 배경에서 블렌딩됩니다. 정보 부족으로 인해 혼란 스러울 수 있습니다.

그래도 문제가 해결되지 않으면 업로드하는 정확한 이미지 형식을 기술하여 시도해보고 결과를 확인하십시오.

+0

슬프게도 이것은 범인이 아닙니다. 나는 매우 간단한 이미지, 테스트를 위해 흰색 배경에 2 개의 빨간색 사각형 (페인트로 만든)을 업로드하려고합니다. jpg, png, bmp 및 실제 이미지로 시도했습니다. 나는 GD가 없으므로 'phpinfo'ed'라고 말했고 나는 그것을 가지고 있다고 말했다. – MoshMage

+0

imagecopyresampled() 대신 대체 해 보셨습니까? 나는 그것이 당신이 말하는 것처럼 범인인지 의심 스럽다.) 주석 달기 - 이것을 알아낼 수있게해라. –

+0

나는 내가 찾을 수있는 "모든"imagecreates을 시도했다고 생각합니다. 나는 그 문제가 "파일이 어디에도 없다"라고 생각하고있다. 나는 createimage 함수를 호출한다. 이상하게 들리는군요.하지만 'TimThumb.php'를 사용하면서 다른 설명을 찾을 수는 없습니다. 코드를 다뤄 보았습니다. [잘, 더 많은 기능이 있지만 여전히 작동합니다.] – MoshMage

1

변경하여

$source = imagecreatefromjpeg($file); 

$source = imagecreatefromjpeg($picWhereTo); 

에 그리고 이것은 당신이 함수를 호출하는 방법입니다

$ _FILES [ 'IMG는'] 이미지의 이름입니다
$objoflclass->image($_FILES['img']['name'],$_FILES['img']['tmp_name'],''); 

업로드 필드와 내가이 문제는 무엇을 이해할 수 있다고 믿는다

+0

이전에 사용 된 '$ source = $ picWhereTo' 같은 결과가 있지만 빈 이미지가 있습니다. 그리고 yes, 'if ($ picinfo = $ upload-> image ($ _ FILES [ 'image'] [ 'name'], $ _ FILES [ 'image'] [ 'tmp_name'])) ' 은 내가 어떻게 부르는지입니다. 그것; 내가 이해할 수없는. 임시 직원. 내가'TimThumb.php' 전화를 받았을 때 - 일단 내가 "시간"을 갖게되면 다시 돌아올 것입니다. – MoshMage

+0

나는 성공을 테스트 한 후에 변경 사항을 제안했습니다. 작동해야합니다. – zamil

+0

그러면 나는 기회가있을 때 곧 다시 테스트 할 것입니다. – MoshMage