2012-09-09 12 views
7

Wiem, że możliwe jest użycie imagecreatefromjpeg(), imagecreatefrompng() itp. Z adresem URL jako "filename" przy pomocy fopen(), ale nie mogę włączyć wrapperów z powodu problemów z bezpieczeństwem. Czy istnieje sposób przekazania adresu URL do imagecreatefromX() bez włączania ich?Czy mogę użyć adresu URL jako źródła dla imagecreatefromjpeg() bez włączania wrapperów fopen?

Ja również próbowałem przy użyciu cURL, a także daje mi problemy:

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,"http://www.../image31.jpg"); //Actually complete URL to image 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
$data = curl_exec($ch); 
curl_close($ch); 

$image = imagecreatefromstring($data); 
var_dump($image); 

imagepng($image); 
imagedestroy($image); 
+0

co mówi var_dump? – FilmJ

+0

Więc nie znam adresu URL, którego używasz, ale sam przetestowałem to i wydawało mi się działać. Użyłem tej metody z ImageMagick w niektórych projektach, a w naszym przypadku ze względów bezpieczeństwa musieliśmy użyć serwera proxy, więc może to byłby twój problem? – FilmJ

+0

Plik var_dump mówi: resource (65) typu (gd) – iRector

Odpowiedz

17

Możesz pobrać plik za pomocą narzędzia cURL, a następnie podać wynik w postaci imagecreatefromstring.

Przykład:

$ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $imageurl); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // good edit, thanks! 
    curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); // also, this seems wise considering output is image. 
    $data = curl_exec($ch); 
    curl_close($ch); 

    $image = imagecreatefromstring($data); 
+0

+1, to jest lepsze niż moja sugestia użycia pliku tymczasowego. Próbowałem szukać czegoś podobnego do 'imagecreatefromstring', ale przegapiłem go pośród wszystkich innych funkcji' imagecreatefrom * '. –

+0

+1, didn Wiedziałem, że wyimaginizowano z tej strony, niezła wskazówka! –

+0

Alain dzięki f lub CURLOPT_RETURNTRANSFER, zapomniałem o tym. Dodałem też CURLOPT_BINARYTRANSFER ... wydawało się, że to ma sens. – FilmJ

0

Zawsze możesz pobrać obraz (np cURL) do tymczasowego pliku, a następnie załadować obraz od tego plik.