我在数据库中有一些base64存储的图像.是否可以使用FPDF直接在PDF文档中打印这些数据?
图像的数据结构
data:image/png;base64,iVBORw0KGgoAAAANSUhEUg7AAAfQAAACWCAYAAAAonXpvAAAfgUlEQVR4Ae2dC9BuVVnHuSN3QaBENA9h5A2IcJxMj8hUkymoQDfClIkmrQZr1EydMqapnKRMc8JmHLBBHadJJaV0lKQDZCmCQiqQ2KERUFARDhcFDpx /33W tznPe/ 3ttaa9/ a2Z9/32Xvt5nvVbl2evtdfee9dtS27bt4mACJmACJm8ACJtBvArv123xbbwImYAImYAImIAJ26K4HJmACJmACJjAAAnboAyhEZ8EETMAETMAE7NBdB0zABEzABExgAATs0AdQiM6CCZiACZiACdihuw6YgAmYgAmYwAAI2KEPoBCdBRMwARMwAROwQ3cdMAETMAETMIEBELBDH0AhOgsmYAImYAImYIfuOmACJm
Run Code Online (Sandbox Code Playgroud)
我认为$pdf->imagepng()应该是FPDF中的正确功能.
Muh*_*him 20
虽然评论提出了TCPDF解决方案,但我确实想说明有一种方法可以完全用FPDF完成.思考过程是这样的:
data:image/png;base64,使用URI从URI中剥离explodebase64_decodefile_put_contentsImageunlink永远记住错误检查.如果图像无法保存到服务器,您显然不想继续执行.确保始终严格检查函数是否返回false!
这是我的解决方案.在这个例子中,我使用一个小图像作为一个小URI.
const TEMPIMGLOC = 'tempimg.png';
$dataURI = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAMAAADarb8dAAAABlBMVEUAAADtHCTeKUOwAAAAF0lEQVR4AWOgAWBE4zISkMbDZQRyaQkABl4ADHmgWUYAAAAASUVORK5CYII=";
$dataPieces = explode(',',$dataURI);
$encodedImg = $dataPieces[1];
$decodedImg = base64_decode($encodedImg);
// Check if image was properly decoded
if( $decodedImg!==false )
{
// Save image to a temporary location
if( file_put_contents(TEMPIMGLOC,$decodedImg)!==false )
{
// Open new PDF document and print image
$pdf = new FPDF();
$pdf->AddPage();
$pdf->Image(TEMPIMGLOC);
$pdf->Output();
// Delete image from server
unlink(TEMPIMGLOC);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 6
为了确保图像与 FPDF 兼容并避免错误,这里是@pedro-soares 代码的修改版本:
function getImage($dataURI){
$img = explode(',',$dataURI,2);
$pic = 'data://text/plain;base64,'.$img[1];
$type = explode("/", explode(':', substr($dataURI, 0, strpos($dataURI, ';')))[1])[1]; // get the image type
if ($type=="png"||$type=="jpeg"||$type=="gif") return array($pic, $type);
return false;
}
Run Code Online (Sandbox Code Playgroud)
因为 FPDF 只允许这三种文件类型,所以检查它是否有效很重要。使用:
$pic = getImage($Base64StringGoesHere);
if ($pic!==false) $pdf->Image($pic[0], 10,30,0,0, $pic[1]);
Run Code Online (Sandbox Code Playgroud)
小智 5
我知道这是一个古老的话题,但是有解决此问题的简便方法。只需尝试以下简单步骤:
data://text/plain;base64,与剥离的URI剩下的内容连接Image()例:
$dataURI= "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAPCAMAAADarb8dAAAABlBMVEUAAADtHCTeKUOwAAAAF0lEQVR4AWOgAWBE4zISkMbDZQRyaQkABl4ADHmgWUYAAAAASUVORK5CYII=";
$img = explode(',',$logo,2);
$pic = 'data://text/plain;base64,'. $img;
$pdf = new FPDF();
$pdf->AddPage();
$pdf->Image($pic, 10,30,0,0,'png');
$pdf->Output();
Run Code Online (Sandbox Code Playgroud)
记住在Image()功能上选择正确的图像类型。
| 归档时间: |
|
| 查看次数: |
14380 次 |
| 最近记录: |