Vâng, câu hỏi của tôi rất đơn giản, tôi chỉ muốn chuyển đổi đầu ra của imagepng
/imagejpg thành base64, làm cách nào tôi có thể thực hiện việc này? một cách chính xác là với chụp bộ đệm đầu ra? cảm ơn.Chuyển đổi đầu ra GD thành base64
21
A
Trả lời
50
imagejpeg
/imagepng
không trả lại bất kỳ dữ liệu nào, chúng ghi dữ liệu hình ảnh trực tiếp vào luồng đầu ra (hoặc tệp).
Nếu bạn muốn nắm bắt dữ liệu này được mã hóa dưới dạng base64, phương pháp dễ nhất là sử dụng PHP Output Control Functions và sau đó sử dụng base64_encode
trên $image_data
.
ob_start();
imagejpeg ($img);
$image_data = ob_get_contents();
ob_end_clean();
$image_data_base64 = base64_encode ($image_data);
4
Trường hợp sử dụng phổ biến nhất cho hình ảnh được mã hóa base64 là đầu ra HTML. Tôi muốn cung cấp một giải pháp hoàn chỉnh hơn cho trường hợp này. Tôi cũng đã thêm khả năng chuyển đổi định dạng hình ảnh đầu ra.
// Example
$gdImg = imagecreate(100, 100);
imagecolorallocate($gdImg, 0, 0, 0);
echo gdImgToHTML($gdImg);
imagedestroy($gdImg);
// Create an HTML Img Tag with Base64 Image Data
function gdImgToHTML($gdImg, $format='jpg') {
// Validate Format
if(in_array($format, array('jpg', 'jpeg', 'png', 'gif'))) {
ob_start();
if($format == 'jpg' || $format == 'jpeg') {
imagejpeg($gdImg);
} elseif($format == 'png') {
imagepng($gdImg);
} elseif($format == 'gif') {
imagegif($gdImg);
}
$data = ob_get_contents();
ob_end_clean();
// Check for gd errors/buffer errors
if(!empty($data)) {
$data = base64_encode($data);
// Check for base64 errors
if ($data !== false) {
// Success
return "<img src='data:image/$format;base64,$data'>";
}
}
}
// Failure
return '<img>';
}
Chúng ta có cần gọi 'imagedestroy ($ gdImg) 'hoặc' ob_end_clean() 'có quan tâm đến điều đó cho chúng ta không? – user3442612
@ user3442612 Thực hành tốt là tự hủy hình ảnh sau khi sử dụng. Tôi không tin rằng nó phù hợp với mẫu ngắn này, nhưng tôi sẽ thêm nó cho mục đích làm những điều "đúng cách". Cảm ơn. – Lachmanski