簡體   English   中英

圖像到base64編碼的問題-PHP

[英]Image to base64 encoding issue - PHP

<?php
   header("Content-type: image/jpeg;charset=utf-8'");
   $path = 'example/source.jpg';
   $da = file_get_contents($path);

   $base64 = base64_encode($da);
   $src = 'data:image/jpeg;charset=utf-8;base64,'.$base64;
   echo '<img src="'.$src.'">';

?>

PHP v5.6.2

我厭倦了在調試中復制$ src值並粘貼到img src值中。 仍然沒有出現。

我在這里錯過了什么?

提前致謝

header(“ Content-type:image / jpeg; charset = utf-8”);

在這里,您對瀏覽器說, i will send you an jpeg image ,然后:

echo '<img src="'.$src.'">';

在這里您發送HTML。

因為您說的是jpeg圖像,所以瀏覽器將嘗試將html呈現為jpeg 由於基於ascii文本的HTML格式與基於二進制的jpeg格式完全不兼容 ,因此瀏覽器在嘗試渲染圖像時會嚴重失敗,並會因某些錯誤而失敗(可能是image is corrupt或類似的情況。)

您可以修復Content-Type標頭以指定您正在發送HTML,然后瀏覽器將(可能成功!)嘗試這樣渲染它,例如:

header("Content-type: text/html;charset=utf-8");

或者您也可以修改代碼以將圖像實際發送為jpeg,例如:

<?php
   header("Content-type: image/jpeg");
   $path = 'example/source.jpg';
   readfile($path);

(順便說一下,base64編碼的jpeg圖像將比原始jpeg圖像大約33%,因此,如果您想要快速的頁面加載,或者想節省帶寬,或者想在ram上節省,請使用readfile()與嵌入式base64方法相比,對於服務器和客戶端而言,速度更快,所需帶寬更少,RAM更少。)

因此,也許您的問題出在您的啞劇類型上。 然后嘗試這段代碼兩個解決方法:

$path = 'domain.com/example/source.jpg';

$content = file_get_contents($path);
$file_info = new \finfo(FILEINFO_MIME_TYPE);
$mime_type = $file_info->buffer(file_get_contents($path));
$base64 = base64_encode($content);
$src = 'data:'.$mime_type.';charset=utf-8;base64,'.$base64;
echo '<img src="'.$src.'">';

注意:最好使用全地址域中的路徑,如果要使用路徑,請使用readfile()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM