2011-10-05 66 views
0

我已經構建了一個系統,可根據用戶從一堆URL下載圖像,並異步獲取它們 - 如果它們比設備的屏幕更寬,我們會調整大小。麻煩的是,其中一些圖像可能是巨大的1MB +,其中許多圖像下載大型文件並對其進行處理導致舊設備陷入困境。下載圖片並調整大小

所以我想我會介紹一個服務器端的級別,可以處理下載和調整大小......但我的PHP並不好。我猜這是可能的,但在幾天的研究後我找不到任何解決方案。有大量的PHP調整大小腳本,但沒有一個來自URL,它們都來自數據庫或HTML內部。我需要它發送一個圖像的URL,下載它,如果它調整太大,然後發回設備。


更新與捲曲

<?php 

$imgurl = $_GET["url"]; 

function curl_download($Url){ 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $Url); 
    curl_setopt($ch, CURLOPT_USERAGENT, "MozillaXYZ/1.0"); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); 
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); 

    $output = curl_exec($ch); 

    $im = imagecreatefromstring($output); 

    if ($im !== false) 
    { 
     header('Content-Type: image/jpeg'); 

     list($width, $height) = getimagesize($im); 
     $new_width = 320; 
     $new_height = 320; 

     // Resample 
     $image_p = imagecreatetruecolor($new_width, $new_height); 
     $image = imagecreatefromjpeg($im); 
     imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height); 

     imagejpeg($image_p, null, 100); 
    } 
    else 
    { 
     echo 'An error occurred.'; 
    } 
    curl_close($ch); 

    return $image_p; 
} 

?> 

回答

2

您可以使用cURLCURLOPT_RETURN_TRANSFER傳遞給curl_setopt來獲取圖像數據。

  1. imagecreatefromstring 將允許您構建一個圖像對象
  2. imagecreate 創建適當大小
  3. imagecopyresampled 的新形象爲resize:然後執行以下步驟應該用於生成調整後的圖像做
  4. 調整後的圖像上
  5. imagejpeg將其發送給瀏覽器

正如@Paul指出的,您需要將內容類型設置爲image/jpeg

+0

謝謝,事情是我不想把它發送到瀏覽器那樣,我需要cURL原來收到的數據。有沒有辦法將imagejpeg轉換回數據表單? – daidai

+0

不要首先將其轉換爲圖像對象。如果你設置了'CURLOPT_RETURN_TRANSFER',那麼'curl_exec'會返回數據。 –

+0

我用cURL代碼更新了我的問題。我怎樣才能得到它在數據表單中返回新圖像,就像我最初從'$ output = curl_exec($ ch);' – daidai

1

您可以使用捲曲或插座下載HTML頁面和圖像,然後使用GD2來調整圖像,並返回到瀏覽器

header("Content-type:image/jpeg"); 

之後,你的iPhone上的應用程序從你的PHP服務器加載這個PHP創建的圖像。我認爲這是以您想要的方式操作來自其他服務器的所有圖像的解決方案。