2011-07-12 44 views
0
header('Content-Type: image/jpeg'); 
$imageURL = $_POST['url']; 
$image = @ImageCreateFromString(@file_get_contents($imageURL)); 

if (is_resource($image) === true) 
    imagejpeg($image, 'NameYouWantGoesHere.jpg'); 

else 
    echo "This image ain't quite cuttin it."; 

這是我必須將我從html表單接收的url轉換爲圖像的代碼。但是,無論何時我試圖顯示它或將其從服務器上取下來查看它,它都「無法讀取」或「損壞」。所以出於某種原因,它被轉換成一個圖像,被認爲是一個適當的資源,但在這一點上不是正確的圖像。有任何想法嗎?將圖片從網址轉換爲真實圖片並保存在服務器上。 (PHP)

+1

檢查PHP configuaration。您可能無法打開使用file_get_contents讀取的遠程文件 – infinity

+0

刪除「header()」行和「@」以獲取一些有意義的錯誤消息。 –

+0

使用'@'是一個壞習慣。在你的情況下,'file_get_contents()'和'imagecreatefromstring()'可能會失敗,你只會注意到它現在的樣子。 – KingCrunch

回答

3

你不想ImageCreateFromString - 使用file_get_contents是讓你的圖像的實際二進制數據。

嘗試$image = @imagecreatefromjpeg(@file_get_contents($imageURL));,看看你是否更喜歡這個結果(假設原始是JPEG)。

+2

如果OP的代碼沒有忽略調整代碼或類似的內容,那麼根本沒有理由使用imagecreatefrom *()或iamgejpeg()。只需file_get_contents($ urlOfImage)並將結果寫入某個本地文件。 – timdev

+0

好點@timdev! –

+0

實際上,OP的代碼將接受任何類型的圖像並將其轉換爲jpeg,假設它是GD接受的格式。 –

0

您可以使用捲曲打開遠程文件:

$ch = curl_init(); 
    // set the url to fetch 
    curl_setopt($ch, CURLOPT_URL, 'http://www.google.com/img.jpg'); 
    // don't give me the headers just the content 
    curl_setopt($ch, CURLOPT_HEADER, 0); 

    // return the value instead of printing the response to browser 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

    // use a user agent to mimic a browser 
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.5) Gecko/20041107 Firefox/1.0'); 

    $content = curl_exec($ch); 
    // remember to always close the session and free all resources 
    curl_close($ch);