Làm thế nào để chuyển đổi một hình ảnh sang mã hóa base64?


290

Bạn có thể vui lòng hướng dẫn cho tôi cách tôi có thể chuyển đổi hình ảnh từ URL sang mã hóa base64 không?


3
Bạn muốn làm điều này để làm gì?
Pekka

7
để nhúng nó vào thuộc tính src của thẻ Img
Volatil3

5
Đây là một chủ đề cũ, nhưng vì mục đích hoàn chỉnh: Nó rất có ý nghĩa để mã hóa hình ảnh, đặc biệt là những hình nhỏ (dưới 1k), để sử dụng trong css. Bằng cách này, bạn lưu một yêu cầu, sẽ mất nhiều thời gian hơn và có thể còn lớn hơn, do chi phí hoạt động.
arminrosu

Câu trả lời:


572

Tôi nghĩ rằng nó nên được:

$path = 'myfolder/myimage.png';
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);

10
Nó phụ thuộc vào những gì bạn cần hình ảnh cho. Nếu đó là một URL nội tuyến, đây là cách để đi. Nó không giống với mã hóa base64 mặc dù.
Pekka

Mẹo tuyệt vời, bây giờ tôi sẽ tạo một chức năng để chỉnh sửa tệp tải lên hoặc di chuyển hoàn nguyên_uploaded_file (), cảm ơn
Vinicius De Jesus

121

Dễ dàng:

$imagedata = file_get_contents("/path/to/image.jpg");
             // alternatively specify an URL, if PHP settings allow
$base64 = base64_encode($imagedata);

lưu ý rằng điều này sẽ phóng to dữ liệu lên 33% và bạn sẽ gặp vấn đề với các tệp có kích thước vượt quá của bạn memory_limit.


1
@ muốn nó! Mã hóa Base64 thường sẽ làm điều đó.
Pekka

38

Cũng sử dụng cách này để biểu diễn hình ảnh ở định dạng mã hóa base64 ... tìm hàm PHP file_get_contentvà bên cạnh sử dụng hàmbase64_encode

và nhận kết quả để chuẩn bị str như data:" . file_mime_type . " base64_encoded string. Sử dụng nó trong thuộc tính img src. xem mã sau đây tôi có thể giúp gì cho bạn

// A few settings
$img_file = 'raju.jpg';

// Read image path, convert to base64 encoding
$imgData = base64_encode(file_get_contents($img_file));

// Format the image SRC:  data:{mime};base64,{data};
$src = 'data: '.mime_content_type($img_file).';base64,'.$imgData;

// Echo out a sample image
echo '<img src="'.$src.'">';

1
Nếu thất bại trong việc tìm chức năng mime_content_type chỉ cần thêm hàm từ svogal từ php.net/manual/en/function.mime-content-type.php
Mario ruiz

15

Chỉ trong trường hợp bạn (vì bất kỳ lý do gì) không thể sử dụng curlcũng không file_get_contents, bạn có thể làm việc xung quanh:

$img = imagecreatefrompng('...');
ob_start();
imagepng($img);
$bin = ob_get_clean();
$b64 = base64_encode($bin);

10
<img src="data:image/png;base64,<?php echo base64_encode(file_get_contents("IMAGE URL HERE")) ?>">

Tôi đã cố gắng sử dụng tài nguyên này nhưng liên tục gặp lỗi, tôi thấy đoạn mã trên hoạt động hoàn hảo.

Chỉ cần thay thế URL IMAGE TẠI ĐÂY bằng URL hình ảnh của bạn - http://www.website.com/image.jpg


6

Rất đơn giản và được sử dụng phổ biến:

function getDataURI($imagePath) {
    $finfo = new finfo(FILEINFO_MIME_TYPE);
    $type = $finfo->file($imagePath);
    return 'data:'.$type.';base64,'.base64_encode(file_get_contents($imagePath));
}

//Use the above function like below:
echo '<img src="'.getDataURI('./images/my-file.svg').'" alt="">';
echo '<img src="'.getDataURI('./images/my-file.png').'" alt="">';

Lưu ý: Loại Mime của tệp sẽ được thêm tự động (nhận trợ giúp từ tài liệu PHP này ).


3

Đây là mã để tải lên để mã hóa và lưu nó vào MySQL

if (!isset($_GET["getfile"])) {
    if ($_FILES["file"]["error"] > 0) {
        echo "Error: " . $_FILES["file"]["error"] . "<br>";
    } else {
        move_uploaded_file($_FILES["file"]["tmp_name"], $_FILES["file"]["name"]);

        $bin_string = file_get_contents($_FILES["file"]["name"]);
        $hex_string = base64_encode($bin_string);
        $mysqli = mysqli_init();

        if (!$mysqli->real_connect('localhost', 'root', '', 'arihant')) {
            die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
        }

        $mysqli->query("INSERT INTO upload(image) VALUES ('" . $hex_string . "')");
    }
}

Để hiển thị hình ảnh sử dụng này

echo "<img src='data:image/jpeg;base64, $image' width=300>";

10
Điều này đã không được yêu cầu.
AlexioVay

1

Dưới đây là một ví dụ sử dụng lệnh gọi cURL .. Điều này tốt hơn hàm file_get_contents () . Tất nhiên, sử dụng base64_encode ()

$url = "http://example.com";

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close($ch);
?>

<img src="data:image/png;base64,<?php echo base64_encode($output);?>">  

1
curlhoàn toàn không "tốt hơn" file_get_contentstrừ khi bạn cần thêm dữ liệu bổ sung vào cuộc gọi cũ. xác thực. Hơn nữa, file_get_contentssẽ dự phòng khi nhận được nội dung của tệp cục bộ khi có thể, do đó không thực hiện cuộc gọi mạng vô dụng.
Hissvard

1

Bạn cũng có thể thực hiện việc này thông qua curl, chỉ cần bạn cần một đường dẫn đến tệp hình ảnh và chuyển nó đến chức năng được cung cấp bên dưới ..

public static function getImageDataFromUrl($url)
{
    $urlParts = pathinfo($url);
    $extension = $urlParts['extension'];
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    $response = curl_exec($ch);
    curl_close($ch);
    $base64 = 'data:image/' . $extension . ';base64,' . base64_encode($response);
    return $base64;

}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.