Создать изображение из URL-адреса Любой тип файла

Я знаю imagecreatefromgif() , imagecreatefromjpeg() и imagecreatefrompng() но есть ли способ создать ресурс изображения (предпочтительно для png) из URL-адреса любого типа допустимого изображения? Или вам нужно определить тип файла, а затем использовать соответствующую функцию?

Когда я говорю url, я имею в виду что-то вроде http://sample.com/image.png , а не URL-адрес данных

Solutions Collecting From Web of "Создать изображение из URL-адреса Любой тип файла"

Возможно, вы этого хотите:

 $jpeg_image = imagecreatefromfile( 'photo.jpeg' ); $gif_image = imagecreatefromfile( 'clipart.gif' ); $png_image = imagecreatefromfile( 'transparent_checkerboard.PnG' ); $another_jpeg = imagecreatefromfile( 'picture.JPG' ); // This requires you to remove or rewrite file_exists check: $jpeg_image = imagecreatefromfile( 'http://example.net/photo.jpeg' ); // SEE BELOW HO TO DO IT WHEN http:// ARGS IS NEEDED: $jpeg_image = imagecreatefromfile( 'http://example.net/photo.jpeg?foo=hello&bar=world' ); 

Вот как это делается:

 function imagecreatefromfile( $filename ) { if (!file_exists($filename)) { throw new InvalidArgumentException('File "'.$filename.'" not found.'); } switch ( strtolower( pathinfo( $filename, PATHINFO_EXTENSION ))) { case 'jpeg': case 'jpg': return imagecreatefromjpeg($filename); break; case 'png': return imagecreatefrompng($filename); break; case 'gif': return imagecreatefromgif($filename); break; default: throw new InvalidArgumentException('File "'.$filename.'" is not valid jpg, png or gif image.'); break; } } 

С некоторыми небольшими изменениями для switch одной и той же функции готов к веб-URL:

  /* if (!file_exists($filename)) { throw new InvalidArgumentException('File "'.$filename.'" not found.'); } <== This needs addiotional checks if using non local picture */ switch ( strtolower( array_pop( explode('.', substr($filename, 0, strpos($filename, '?'))))) ) { case 'jpeg': 

После этого вы можете использовать его с http://img.ruphp.com/php/image.jpg :

 $jpeg_image = imagecreatefromfile( 'http://example.net/photo.jpeg' ); $gif_image = imagecreatefromfile( 'http://img.ruphp.com/php/art.gif?param=23&another=yes' ); 

Некоторые доказательства:

Как вы можете прочитать из официального руководства PHP function.imagecreatefromjpeg.php GD позволяет загружать изображения из URL-адресов, поддерживаемых функцией.fopen.php , поэтому нет необходимости сначала извлекать изображение и сохранять его в файл и открывать этот файл.

Самый простой способ сделать это – позволить php решить, что такое тип файла:

 $image = imagecreatefromstring(file_get_contents($src)); 

Я использую эту функцию. Он поддерживает все типы URL-адресов и обтекателей потоков, и все типы изображений, которые могут обрабатывать php.

 /** * creates a image ressource from file (or url) * * @version: 1.1 (2014-05-02) * * $param string: $filename url or local path to image file * @param [bool: $use_include_path] As of PHP 5 the FILE_USE_INCLUDE_PATH constant can be used to trigger include path search. * @param [resource: $context] A valid context resource created with stream_context_create(). If you don't need to use a custom context, you can skip this parameter by NULL * @param [&array: $info] Array with result info: $info["image"] = imageinformation from getimagesize, $info["http"] = http_response_headers (if array was populated) * * @see: http://php.net/manual/function.file-get-contents.php * @see: http://php.net/manual/function.getimagesize.php * * @return bool|resource<gd> false, wenn aus Dateiinhalt keine gueltige PHP-Bildresource erstellt werden konnte (zb bei BMP-Datei) * @throws InvalidArgumentException Wenn Datei kein gueltiges Bild ist, oder nicht gelesen werden kann * */ function createImageFromFile($filename, $use_include_path = false, $context = null, &$info = null) { // try to detect image informations -> info is false if image was not readable or is no php supported image format (a check for "is_readable" or fileextension is no longer needed) $info = array("image"=>getimagesize($filename)); $info["image"] = getimagesize($filename); if($info["image"] === false) throw new InvalidArgumentException("\"".$filename."\" is not readable or no php supported format"); else { // fetches fileconten from url and creates an image ressource by string data // if file is not readable or not supportet by imagecreate FALSE will be returnes as $imageRes $imageRes = imagecreatefromstring(file_get_contents($filename, $use_include_path, $context)); // export $http_response_header to have this info outside of this function if(isset($http_response_header)) $info["http"] = $http_response_header; return $imageRes; } } 

Использование (простой пример):

 $image = createImageFromFile("http://sample.com/image.png"); 

Использование (сложный пример):

 // even sources with php extensions are supported and eg Proxy connections and other context Options // see http://php.net/manual/function.stream-context-create.php for examples $options = array("http"=> array("proxy" => "tcp://myproxy:8080", "request_fulluri" => true ) ); $context = stream_context_create($options); $image = createImageFromFile("http://de3.php.net/images/logo.php", null, $context,$info); // ... your code to resize or modify the image 

Это может помочь вам

$ image = imagecreatefromstring (file_get_contents ('your_image_path_here'));

Пример: $image = imagecreatefromstring(file_get_contents('sample.jpg'));

Сначала введите URL-адрес с помощью функции file_get_contents($url) и сохраните содержимое в файл. После этого вы можете использовать правильные функции манипуляции с изображениями для дальнейших изменений. Вы можете использовать следующий код для сохранения изображения с URL-адреса. Вот пример кода:

 $url = "http://sample.com/image.png"; $arr = explode("/",$url); $img_file = dir(__FILE__).'/'.$arr[count($arr)-1]; $data = file_get_contents($url); $fp = fopen($img_file,"w"); fwrite($fp,$data); fclose($fp); 

Благодарю.

вы анализируете этот код.

 $url=$_SERVER['REQUEST_URI']; $url=explode('.',$url); $extension=$url[1]; switch($extension){ case'jpg': imagecreatefromjpeg(); break; } 

Вас также может заинтересовать самая продвинутая версия:

http://salman-w.blogspot.com/2008/10/resize-images-using-phpgd-library.html

 <?php /* * PHP function to resize an image maintaining aspect ratio * http://salman-w.blogspot.com/2008/10/resize-images-using-phpgd-library.html * * Creates a resized (eg thumbnail, small, medium, large) * version of an image file and saves it as another file */ define('THUMBNAIL_IMAGE_MAX_WIDTH', 150); define('THUMBNAIL_IMAGE_MAX_HEIGHT', 150); function generate_image_thumbnail($source_image_path, $thumbnail_image_path) { list($source_image_width, $source_image_height, $source_image_type) = getimagesize($source_image_path); switch ($source_image_type) { case IMAGETYPE_GIF: $source_gd_image = imagecreatefromgif($source_image_path); break; case IMAGETYPE_JPEG: $source_gd_image = imagecreatefromjpeg($source_image_path); break; case IMAGETYPE_PNG: $source_gd_image = imagecreatefrompng($source_image_path); break; } if ($source_gd_image === false) { return false; } $source_aspect_ratio = $source_image_width / $source_image_height; $thumbnail_aspect_ratio = THUMBNAIL_IMAGE_MAX_WIDTH / THUMBNAIL_IMAGE_MAX_HEIGHT; if ($source_image_width <= THUMBNAIL_IMAGE_MAX_WIDTH && $source_image_height <= THUMBNAIL_IMAGE_MAX_HEIGHT) { $thumbnail_image_width = $source_image_width; $thumbnail_image_height = $source_image_height; } elseif ($thumbnail_aspect_ratio > $source_aspect_ratio) { $thumbnail_image_width = (int) (THUMBNAIL_IMAGE_MAX_HEIGHT * $source_aspect_ratio); $thumbnail_image_height = THUMBNAIL_IMAGE_MAX_HEIGHT; } else { $thumbnail_image_width = THUMBNAIL_IMAGE_MAX_WIDTH; $thumbnail_image_height = (int) (THUMBNAIL_IMAGE_MAX_WIDTH / $source_aspect_ratio); } $thumbnail_gd_image = imagecreatetruecolor($thumbnail_image_width, $thumbnail_image_height); imagecopyresampled($thumbnail_gd_image, $source_gd_image, 0, 0, 0, 0, $thumbnail_image_width, $thumbnail_image_height, $source_image_width, $source_image_height); imagejpeg($thumbnail_gd_image, $thumbnail_image_path, 90); imagedestroy($source_gd_image); imagedestroy($thumbnail_gd_image); return true; } ?>