webentwicklung-frage-antwort-db.com.de

Erstellen Sie ein Bild aus einem beliebigen URL-Typ

Ich kenne imagecreatefromgif() , imagecreatefromjpeg() und imagecreatefrompng() , aber es gibt eine Möglichkeit, eine Bildressource (für png vorzugsweise) aus einer URL von any type zu erstellen Bild? Oder müssen Sie den Dateityp ermitteln und dann die entsprechende Funktion verwenden?

Wenn ich url sage, meine ich so etwas wie http://sample.com/image.png, keine Daten-url

14
Steve Robbins

Vielleicht möchtest du das:

$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' );

So wird's gemacht:

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;
    }
}

Mit einigen kleinen Änderungen an switch ist dieselbe Funktion für Web-URLs bereit:

    /* 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':

Danach können Sie es mit http://www.tld/image.jpg: Verwenden.

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

Einige Beweise:

Wie man aus dem offiziellen PHP manual function.imagecreatefromjpeg.php Gd lesen kann, erlaubt Gd das Laden von Images von URLs, die von function.fopen.php unterstützt werden es ist nicht erforderlich, zuerst ein Bild abzurufen und speichern Sie es in einer Datei und öffnen Sie diese Datei.

24
Sampo Sarrala

Der einfachste Weg, dies zu tun, ist, dass PHP den Dateityp entscheidet:

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

Ich benutze diese Funktion. Es unterstützt alle Arten von URLs und Stream-Wrappern sowie alle Bildtypen, die php verarbeiten kann.

/**
 * 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 (z.b. 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;
  }
}

Verwendung (einfaches Beispiel): 

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

Verwendung (komplexes Beispiel): 

// even sources with php extensions are supported and e.g. 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
6
Radon8472

Das kann dir helfen

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

Beispiel: $image = imagecreatefromstring(file_get_contents('sample.jpg'));

2
edCoder

Rufen Sie zuerst die URL mit der Funktion file_get_contents($url) ab und speichern Sie den Inhalt in einer Datei. Danach können Sie mit den richtigen Bildbearbeitungsfunktionen weitere Änderungen vornehmen. Sie können folgenden Code verwenden, um ein Bild von der URL zu speichern. Hier ist der Beispielcode:

$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);

Vielen Dank.

1
Dev

sie analysieren diesen Code.

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

Möglicherweise interessieren Sie sich auch für die fortgeschrittenste Version: 

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 (e.g. 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;
}
?>
0
test30