php: yeniden ve ikili verilerden bir görüntü

4 Cevap php

Bu ikili veri görüntüleri yeniden (gerekirse bunları işlemek) ve aynı komut, onları görüntülemek mümkün mü? Gibi bir şey

// 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...

Ben işleme sonra diske görüntüleri depolamak ve oradan almak, ya da harici bir komut dosyası kullanarak önlemek istiyor ...

4 Cevap

Sen Görüntünün src özellik bir data URI kullanarak bunu yapabilirsiniz.

Biçimi: data:[<MIME-type>][;charset="<encoding>"][;base64],<data>

Bu örnek düz Wikipedia page on data URIs dan:

<?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" />

Sizin için diğer olasılık çıkışına görüntü verilerini üreten bir komut dosyası oluşturmak ve bu bağlantı doğrudan etmektir.

image.php

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

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

other_pages.php:

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

EDIT: Sorry, I missed the notice of not wanting an external script, but this solution is more efficient than encoding the image to base64.

Sadece görüntüyü istediğiniz durumda, çevresinde herhangi bir html olmadan aşağıdakileri kullanabilirsiniz:

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

You must not forget the Content-Length header, otherwise it won't work. You may also want to replace mime_content_type() as it is deprecated according to the docs.