2010-04-13 12 views
6

Tôi muốn có thể truy xuất hình ảnh từ xa từ máy chủ web, định lại mẫu và sau đó phân phối lên trình duyệt VÀ lưu nó vào một tệp. Dưới đây là những gì tôi có cho đến nay:Lấy hình ảnh từ xa bằng cách sử dụng cURL rồi resample

$ch = curl_init(); 

// set URL and other appropriate options 
curl_setopt($ch, CURLOPT_URL, "$rURL"); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_HEADER, 0); 

// grab URL and pass it to the browser 
$out = curl_exec($ch); 

// close cURL resource, and free up system resources 
curl_close($ch); 

$imgRes = imagecreatefromstring($out); 
imagejpeg($imgRes, $filename, 70); 

header("Content-Type: image/jpg"); 
imagejpeg($imgRes, NULL, 70); 
exit(); 

Cập nhật

cập nhật để phản ánh câu trả lời đúng dựa trên thảo luận dưới đây

Trả lời

4

Bạn có thể lấy các tập tin vào một nguồn tài nguyên GD sử dụng imagecreatefromstring():

imagecreatefromstring() trả về một mã định danh hình ảnh đại diện cho hình ảnh thu được từ dữ liệu đã cho. Các loại này sẽ tự động được phát hiện nếu bản dựng PHP của bạn hỗ trợ chúng: JPEG, PNG, GIF, WBMP và GD2.

từ đó, nó khá đơn giản khi sử dụng imagecopyresampled().

Xuất kết quả bằng cách sử dụng imagejpeg() hoặc bất kỳ định dạng đầu ra nào phù hợp nhất với bạn.

Thực hiện một đầu ra với một tên file:

imagejpeg($image_resource, "/path/to/image.jpg"); 

sau đó gửi tài nguyên cùng với trình duyệt:

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

tùy thuộc vào định dạng của hình ảnh, bạn có thể muốn sử dụng imagepng() hoặc các hàm imagegif() thay thế.

Bạn có thể muốn làm việc với các định dạng đầu ra khác nhau tùy thuộc vào loại tệp đầu vào. Bạn có thể tìm nạp loại tệp đầu vào bằng cách sử dụng getimagesize().

Hãy nhớ rằng bạn có thể điều chỉnh chất lượng hình ảnh JPEG kết quả bằng thông số $quality. Mặc định là 75% có thể trông khá crappy.

+0

Cảm ơn ... Tôi đã cập nhật câu hỏi của mình ngay bây giờ với thông tin của bạn ... Điều này yêu cầu hai mẫu hình ảnh mặc dù trái ngược với chỉ một lần nữa .. lại có vẻ không hiệu quả. Một cách tốt hơn để làm điều này là gì? – Chris

+0

@Chris Hai mẫu của hình ảnh? Tại sao? Bạn lưu trữ cùng một tài nguyên được lấy mẫu lại vào tệp jpeg và phục vụ nó. Tại sao bạn sẽ thực hiện việc lấy mẫu lại hai lần? –

+0

Xin lỗi tôi đã giải thích sai những gì bạn đã viết. Tôi đã cập nhật mã trong câu hỏi của mình. Nó tạo ra jpeg một lần với chất lượng thấp hơn. Có lẽ điều này là đủ để giảm kích thước tập tin? Sau đó tôi lưu nó vào tập tin, nhưng để phục vụ nó sau đó tôi cần phải đọc các tập tin một lần nữa, tôi có thể không lưu trữ nó tạm thời trong bộ nhớ hoặc đây là một chi phí không đáng kể? – Chris