2010-10-19 14 views
204

Können Sie mir bitte zeigen, wie ich ein Bild von einer URL in eine base64-Codierung konvertieren kann?Wie konvertiert man ein Bild in die base64-Codierung?

+3

Was tun Sie dies tun? –

+4

, um es in src Attribut von Img Tag – Volatil3

+4

Dies ist ein alter Thread, aber aus Gründen der Vollständigkeit: Es macht viel Sinn, Bilder zu verschlüsseln, besonders kleine (unter 1k), für den Einsatz in CSS. Auf diese Weise speichern Sie eine Anfrage, die aufgrund von Gemeinkosten länger dauert und möglicherweise noch größer ist. – arminrosu

Antwort

389

denke ich, dass es sein sollte:

$path = 'myfolder/myimage.png'; 
$type = pathinfo($path, PATHINFO_EXTENSION); 
$data = file_get_contents($path); 
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data); 
+6

Es hängt davon ab, wofür Sie das Bild benötigen. Wenn es sich um eine Inline-URL handelt, ist dies der richtige Weg. Es ist nicht identisch mit bloßen Base64-Codierung. –

97

Ganz einfach:

$imagedata = file_get_contents("/path/to/image.jpg"); 
      // alternatively specify an URL, if PHP settings allow 
$base64 = base64_encode($imagedata); 

bedenken Sie, dass diese die Daten um 33% vergrößern wird, und Sie werden Probleme mit Dateien, deren Größe nicht überschreiten Ihre memory_limit haben.

+26

+1 für die Datenvergrößerung –

19

Einsatz auch auf diese Weise Bild in base64 kodieren Format darzustellen ... Fund PHP-Funktion file_get_content und nächste Funktion base64_encode

verwenden und Ergebnis erhalten zur Vorbereitung str als data:" . file_mime_type . " base64_encoded string. Verwenden Sie es im img src Attribut. siehe folgenden Code kann ich Ihnen helfen.

// A few settings 
$img_file = 'raju.jpg'; 

// Read image path, convert to base64 encoding 
$imgData = base64_encode(file_get_contents($img_file)); 

// Format the image SRC: data:{mime};base64,{data}; 
$src = 'data: '.mime_content_type($img_file).';base64,'.$imgData; 

// Echo out a sample image 
echo '<img src="'.$src.'">'; 
+1

Wenn die Funktion mime_content_type nicht gefunden wurde, fügen Sie einfach die Funktion von svogal aus http://php.net/manual/en/function.mime-content-type.php hinzu. –

+0

@Raju Rajotia Jangid cool +1 – pregmatch

7
<img src="data:image/png;base64,<?php echo base64_encode(file_get_contents("IMAGE URL HERE")) ?>"> 

ich diese Ressource zu nutzen versuchte, behielt aber einen Fehler bekommen, fand ich den obigen Code funktionierte perfekt.

einfach ersetzt BILD URL HIER mit der URL Ihres Bildes - http://www.website.com/image.jpg

+0

Danke für die Komprimierung als so klein wie möglich UND Sie haben den img-Tag Use-Case enthalten. Beste Antwort sicher. – BarryMode

0

Hier ist der Code für den Upload zu codieren und an die MySQL

if (!isset($_GET["getfile"])) { 
    if ($_FILES["file"]["error"] > 0) { 
     echo "Error: " . $_FILES["file"]["error"] . "<br>"; 
    } else { 
     move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]); 

     $bin_string = file_get_contents($_FILES["file"]["name"]); 
     $hex_string = base64_encode($bin_string); 
     $mysqli = mysqli_init(); 

     if (!$mysqli->real_connect('localhost', 'root', '', 'arihant')) { 
      die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); 
     } 

     $mysqli->query("INSERT INTO upload(image) VALUES ('" . $hex_string . "')"); 
    } 
} 

Für zeigt das Bild Verwendung dieses

speichern
echo "<img src='data:image/jpeg;base64, $image' width=300>"; 
+4

Dies wurde nicht gefragt. – AlexioVay

2

Hier ist ein Beispiel mit einem cURL-Aufruf .. Dies ist besser als die file_get_contents() Funktion. Natürlich verwenden base64_encode()

$url = "http://example.com"; 

$ch = curl_init($url); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
$output = curl_exec($ch); 
curl_close($ch); 
?> 

<img src="data:image/png;base64,<?php echo base64_encode($output);?>"> 
+3

Warum ist es besser? – ruuter

3

Sehr einfach und häufig verwendet werden:

function getDataURI($imagePath) { 
    $finfo = new finfo(FILEINFO_MIME_TYPE); 
    $type = $finfo->file($imagePath); 
    return 'data:'.$type.';base64,'.base64_encode(file_get_contents($imagePath)); 
} 

//Use the above function like below: 
echo '<img src="'.getDataURI('./images/my-file.svg').'" alt="">'; 
echo '<img src="'.getDataURI('./images/my-file.png').'" alt="">'; 

Hinweis: Der Mime-Type der Datei automatisch Hilfe (unter hinzugefügt werden aus diesem PHP documentation).

0

Sie können auch über curl tun dies, nur einen Pfad zu einer Bilddatei müssen und es an die Funktion unten passieren ..

public static function getImageDataFromUrl($url) 
{ 
    $urlParts = pathinfo($url); 
    $extension = $urlParts['extension']; 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
    curl_setopt($ch, CURLOPT_HEADER, 0); 
    $response = curl_exec($ch); 
    curl_close($ch); 
    $base64 = 'data:image/' . $extension . ';base64,' . base64_encode($response); 
    return $base64; 

} 
6

Gerade falls Sie sind (warum auch immer) nicht in der Lage zu verwenden curl noch file_get_contents, können Sie arbeiten, um:

$img = imagecreatefrompng('...'); 
ob_start(); 
imagepng($img); 
$bin = ob_get_clean(); 
$b64 = base64_encode($bin); 
Verwandte Themen