Frage

Ist es möglich, Bilder aus Binärdaten neu zu erstellen (bei Bedarf zu verarbeiten) und anzuzeigen, alles im selben Skript?Etwas wie

// get and display image 1:
$imagedata1 = file_get_contents('assets/test.png');
$imagedata1 = process_using_gd_or_something($imagedata1);

echo "<img src={$imagedata1} >"; // <-- IS THIS (OR EQUIVALENT) POSSIBLE?

// get and display image 2:
//etc...

Ich möchte vermeiden, die Bilder nach der Verarbeitung auf der Festplatte zu speichern und von dort abzurufen oder ein externes Skript zu verwenden ...

War es hilfreich?

Lösung

Sie können dies mit einem tun Daten Uri im Bild src Attribut.

Das Format lautet: data:[<MIME-type>][;charset="<encoding>"][;base64],<data>

Dieses Beispiel ist direkt von der Wikipedia -Seite auf Daten uris:

<?php
function data_uri($file, $mime) 
{  
  $contents = file_get_contents($file);
  $base64   = base64_encode($contents); 
  return ('data:' . $mime . ';base64,' . $base64);
}
?>

<img src="<?php echo data_uri('elephant.png','image/png'); ?>" alt="An elephant" />

Andere Tipps

Dies ist tatsächlich mit Inline-Bildern (genannt Daten-URIS).

Ihr Bild-Tag würde etwa so aussehen:

<img src="data:image/gif;base64,R0lGODlhEAAOALMAAOazToeHh0tLS/7LZv/0jvb29t/f3//Ub/
/ge8WSLf/rhf/3kdbW1mxsbP//mf///yH5BAAAAAAALAAAAAAQAA4AAARe8L1Ekyky67QZ1hLnjM5UUde0ECwLJoExKcpp
V0aCcGCmTIHEIUEqjgaORCMxIC6e0CcguWw6aFjsVMkkIr7g77ZKPJjPZqIyd7sJAgVGoEGv2xsBxqNgYPj/gAwXEQA7" 
width="16" height="14" alt="embedded folder icon">

Warum sie meist keine gute Idee sind:

  • Das Laden der Seite wird sein verlangsamt weil das Bild abgerufen werden muss Vor Die vollständige HTML-Struktur kann geladen und somit gerendert werden.Dies gilt umso mehr, wenn Sie zusätzliche Vorgänge am Bild durchführen.Ihre Website wird sich höchstwahrscheinlich viel langsamer anfühlen, als wenn es ein externes Bild wäre.

  • Inline-Bilder müssen Base64-kodiert sein, 33 % zu ihrer Größe hinzufügen.

Wenn es sich um eine öffentliche Website mit einigermaßen hohem Datenverkehr handelt, würde ich Ihnen empfehlen, Ihr Bild extern zu speichern und zwischenzuspeichern.Wenn es sich nur um ein kleines Projekt handelt, könnten Inline-Bilder für Sie geeignet sein.

Versuche dies...

$img=base64_encode($row['PICTURE']);

<img alt="105x105" class="img-responsive" src="data:image/jpg;charset=utf8;base64,<?php echo $img ?>"/>

Eine andere Möglichkeit für Sie besteht darin, ein Skript zu erstellen, das die Bilddaten an die Ausgabe erstellt und den Link dazu leitet.

Image.php

$imagedata1 = file_get_contents('assets/test.png');
$imagedata1 = process_using_gd_or_something($imagedata1);

header('Content-type: image/png');
echo $imagedata1;

othus_pages.php:

echo "<img src='image.php?some_params'>";

Bearbeiten: Entschuldigung, ich habe die Mitteilung verpasst, kein externes Skript zu wünschen, aber diese Lösung ist effizienter als das Codieren des Bildes für Base64.

Falls Sie nur das Bild wünschen, können Sie Folgendes verwenden:

$filename = 'assets/test.png';
$original_image = file_get_contents($filename);
$processed_image = process_the_image_somehow($original_image);

header('Content-type: '.mime_content_type($filename));
header('Content-Length: '.strlen($processed_image));
echo $processed_image;

Sie dürfen den Header der Inhaltslänge nicht vergessen, sonst wird er nicht funktioniert. Möglicherweise möchten Sie auch mime_content_type () ersetzen, da es gemäß den Dokumenten veraltet ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top