Bir görüntü base64 kodlamasına nasıl dönüştürülür?


291

Lütfen bir resmi bir URL'den base64 kodlamasına nasıl dönüştürebilirim?


3
Bunu ne için yapmak istiyorsun?
Pekka

7
etiketi src özelliğine katıştırmak
Volatil3 20:10

5
Bu eski bir iş parçacığıdır, ancak tamlık uğruna: Görüntüleri, özellikle küçük olanları (1k altı), css'de kullanmak için kodlamak çok mantıklıdır. Bu şekilde, genel gider nedeniyle daha uzun sürecek ve daha da büyük olabilecek bir isteği kaydedersiniz.
arminrosu

Yanıtlar:


574

Bence olmalı:

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

10
Görüntüye neye ihtiyacınız olduğuna bağlıdır. Satır içi bir URL ise, bu yol. Yine de sadece base64 kodlaması ile aynı değildir.
Pekka

Mükemmel ipucu, şimdi ben dosya yükleme düzenlemek için bir işlev, ya da bir geri hareket move_uploaded_file (), teşekkürler
Vinicius De Jesus

122

Kolay:

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

bunun verileri% 33 büyüteceğini ve boyutu sizin olan dosyalarınızda sorun yaşayacağınızı unutmayın memory_limit.


1
@anna öyle! Base64 kodlaması genellikle bunu yapar.
Pekka

38

Base64 kodlama biçimindeki görüntüyü temsil etmek için de bu yolu kullanın ... PHP işlevini bulun file_get_contentve işlevi kullanınbase64_encode

ve str'yi hazırlamak için sonuç alın data:" . file_mime_type . " base64_encoded string. İmg src özelliğinde kullanın. aşağıdaki koda bakınız size yardımcı olabilir.

// 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
Eğer mime_content_type fonksiyonunu bulamazsanız sadece php.net/manual/en/function.mime-content-type.php adresinden svogal fonksiyonunu ekleyin
mario ruiz

16

(Hangi nedenle olursa olsun) kullanamadığınız durumda curlne file_get_contentsde çalışabilirsiniz:

$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")) ?>">

Bu kaynağı kullanmaya çalışıyordum ama hata almaya devam ettim, yukarıdaki kodun mükemmel çalıştığını gördüm.

BURADA IMAGE URL'sini resminizin URL'si ile değiştirdiniz - http://www.website.com/image.jpg


6

Çok basit ve yaygın olarak kullanılacak:

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

Not: Dosyanın Mime Tipi otomatik olarak eklenecektir (bu PHP dokümanlarından yardım alınarak ).


3

Kodlamak ve MySQL'e kaydetmek için yükleme kodu

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 . "')");
    }
}

Resmi göstermek için bunu kullanın

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

10
Bu istenmedi.
AlexioVay

1

İşte cURL çağrısı kullanan bir örnek .. Bu file_get_contents () fonksiyonundan daha iyidir . Tabii ki, base64_encode () kullanın

$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
curlfile_get_contentsçağrıya ek veri eklemeniz gerekmediği sürece kesinlikle "daha iyi" değildir . kimlik doğrulaması. Dahası, file_get_contentsmümkün olduğunda yerel bir dosyanın içeriğini almaya geri döner, böylece işe yaramaz bir ağ çağrısı yapmaz.
Hissvard

1

Bunu curl ile de yapabilirsiniz, sadece bir görüntü dosyasına giden bir yola ihtiyacınız var ve aşağıda verilen işleve iletmeniz yeterlidir.

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;

}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.