2011-01-31 2 views
3

이 스크립트를 사용하여 원격 이미지를 다운로드하고 크기를 조정합니다. 크기 조정 부분에서 뭔가 잘못되었습니다. 이게 뭐야? 내가 그것을 실행하면원격 이미지 컬링 및 크기 조정

<?php 
$img[]='http://i.indiafm.com/stills/celebrities/sada/thumb1.jpg'; 
$img[]='http://i.indiafm.com/stills/celebrities/sada/thumb5.jpg'; 
foreach($img as $i){ 
    save_image($i); 
    if(getimagesize(basename($i))){ 
     echo '<h3 style="color: green;">Image ' . basename($i) . ' Downloaded OK</h3>'; 
    }else{ 
     echo '<h3 style="color: red;">Image ' . basename($i) . ' Download Failed</h3>'; 
    } 
} 

function save_image($img,$fullpath='basename'){ 
    if($fullpath=='basename'){ 
     $fullpath = basename($img); 
    } 
    $ch = curl_init ($img); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_BINARYTRANSFER,1); 
    $rawdata=curl_exec($ch); 
    curl_close ($ch); 




    // now you make an image out of it 

    $im = imagecreatefromstring($rawdata); 

    $x=300; 
    $y=250; 

    // then you create a second image, with the desired size 
    // $x and $y are the desired dimensions 
    $im2 = imagecreatetruecolor($x,$y); 


    imagecopyresized($im2,$im,0,0,0,0,$x,$y,imagesx($im),imagesy($im)); 


    imagecopyresampled($im2,$im,0,0,0,0,$x,$y,imagesx($im),imagesy($im)); 

    // delete the original image to save resources 
    imagedestroy($im); 



    if(file_exists($fullpath)){ 
     unlink($fullpath); 
    } 
    $fp = fopen($fullpath,'x'); 
    fwrite($fp, $im2); 
    fclose($fp); 

    // remember to free resources 
imagedestroy($im2); 



} 
?> 
+0

어떤 오류가 발생합니까? – Merijn

+0

테스트 케이스는 어디에 있습니까? – Greg

+0

다운로드 실패 오류는 – mark

답변

2

은, PHP는 나에게 다음과 같은 오류를 제공합니다 :

Warning: fwrite() expects parameter 2 to be string, resource given ... on line 53

fwrite()는 파일에 문자열을 씁니다. GD 함수 imagejpeg()을 사용하여 GD 리소스를 파일에 저장하려고합니다. 그것은 당신이 파일을 잡아입니다 컬하고있는 모든, 당신은 단순히 file_get_contents()를 사용하는 대신 수 있을지는 관련이없는 메모에서

$fp = fopen($fullpath,'x'); 
fwrite($fp, $im2); 
fclose($fp); 

imagejpeg($im2, $fullpath); 

을 변경할 때 나를 위해 작동 cURL, PHP가 fopen 함수에서 전체 URL을 허용하도록 구성되었다고 가정합니다. (나는 그것이 기본적으로라고 생각합니다.) 자세한 내용은 the file_get_contents() manual page의 Notes 섹션을 참조하십시오. 함수 은 이진 안전이므로 텍스트 파일 외에도 이미지와 함께 작동합니다. 그것을 사용하려면, 그냥이 라인과 컬 기능의 여섯 개 라인을 교체 :

$rawdata = file_get_contents($img); 

업데이트 :
이 아래 질문에 대한 응답으로, 당신은 그들에 대한 새 파일 이름을 지정할 수 있습니다 배열 키는 다음과 같습니다 :

<?php 
$img['img1.jpg']='http://i.indiafm.com/stills/celebrities/sada/thumb1.jpg'; 
$img['img2.jpg']='http://i.indiafm.com/stills/celebrities/sada/thumb5.jpg'; 
foreach($img as $newname => $i){ 
    save_image($i, $newname); 
    if(getimagesize(basename($newname))){ 
+0

입니다. $ img [] = 'http : //i.indiafm.com/stills/celebrities/sada/thumb1.jpg';에서 이미지의 사용자 정의 이름을 정의 할 수 있습니까? 광고가 어떤 방식으로 함수에 전달됩니까? – mark

+0

@mark. 위의 답변에 코드가 추가되었습니다. 충분한 공간이 없기 때문입니다. – Wiseguy