[英]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.