Bagaimana cara mengubah gambar ke pengkodean base64?

290

Bisakah Anda memandu saya bagaimana saya bisa mengkonversi gambar dari URL ke pengkodean base64?

Volatil3
sumber
3
Untuk apa Anda melakukan ini?
Pekka
7
untuk menanamkannya dalam atribut src dari tag Img
Volatil3
5
Ini adalah utas lama, tetapi demi kelengkapan: Sangat masuk akal untuk menyandikan gambar, terutama yang kecil (di bawah 1k), untuk digunakan dalam css. Dengan cara ini Anda menyimpan satu permintaan, yang akan memakan waktu lebih lama dan mungkin lebih besar, karena overhead.
arminrosu

Jawaban:

572

Saya pikir seharusnya:

$path = 'myfolder/myimage.png';
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
Ronny Sherer
sumber
10
Tergantung pada apa yang Anda butuhkan untuk gambar. Jika ini sebagai URL sebaris, inilah caranya. Itu tidak identik dengan pengkodean base64 belaka.
Pekka
Tip luar biasa, sekarang saya akan membuat fungsi untuk mengedit unggahan file, atau revert move_uploaded_file (), terima kasih
Vinicius De Jesus
121

Mudah:

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

ingatlah bahwa ini akan memperbesar data sebesar 33%, dan Anda akan memiliki masalah dengan file yang ukurannya melebihi Anda memory_limit.

Pekka
sumber
1
@anna ya! Pengkodean Base64 umumnya akan melakukan itu.
Pekka
38

Gunakan juga cara ini untuk mewakili gambar dalam format encode base64 ... cari fungsi PHP file_get_contentdan selanjutnya gunakan fungsibase64_encode

dan dapatkan hasil untuk mempersiapkan str as data:" . file_mime_type . " base64_encoded string. Gunakan dalam atribut img src. lihat kode berikut ini bisa saya bantu.

// 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.'">';
Raju Rajotia Jangid
sumber
1
Jika gagal menemukan fungsi mime_content_type cukup tambahkan fungsi dari svogal dari php.net/manual/en/function.mime-content-type.php
mario ruiz
15

Jika Anda (karena alasan apa pun) tidak dapat menggunakan curlatau file_get_contents, Anda dapat mengatasi:

$img = imagecreatefrompng('...');
ob_start();
imagepng($img);
$bin = ob_get_clean();
$b64 = base64_encode($bin);
yaart
sumber
10
<img src="data:image/png;base64,<?php echo base64_encode(file_get_contents("IMAGE URL HERE")) ?>">

Saya mencoba menggunakan sumber ini tetapi terus mendapatkan kesalahan, saya menemukan kode di atas bekerja dengan sempurna.

Baru saja mengganti URL IMAGE DI SINI dengan URL gambar Anda - http://www.website.com/image.jpg

GoldenGonaz
sumber
6

Sangat sederhana dan umum digunakan:

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="">';

Catatan: Mime-Type file akan ditambahkan secara otomatis (mengambil bantuan dari dokumentasi PHP ini ).

Reza Mamun
sumber
3

Berikut adalah kode untuk mengunggah untuk menyandikan dan menyimpannya ke 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 . "')");
    }
}

Untuk menunjukkan gambar gunakan ini

echo "<img src='data:image/jpeg;base64, $image' width=300>";
Vivek
sumber
10
Ini tidak diminta.
AlexioVay
1

Berikut adalah contoh menggunakan panggilan CURL .. Ini lebih baik daripada fungsi file_get_contents () . Tentu saja, gunakan 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);?>">  
JeanAlesi
sumber
1
curlsama sekali tidak "lebih baik" daripada file_get_contentskecuali Anda perlu menambahkan data tambahan ke panggilan ex. autentikasi. Selain itu, file_get_contentsakan mundur untuk mendapatkan konten file lokal bila memungkinkan, sehingga tidak membuat panggilan jaringan yang tidak berguna.
Hissvard
1

Anda juga dapat melakukan ini melalui curl, Anda hanya perlu path ke file gambar dan meneruskannya ke fungsi yang diberikan di bawah ini ..

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;

}
Tayyab Hussain
sumber