web-dev-qa-db-fra.com

PHP: Comment convertir une image d'URL en Base64?

Je veux convertir l'image de son URL en base64.

19
Sharj

Voulez-vous créer une URL de données? Vous avez besoin d'un type MIME et d'autres informations supplémentaires alors (voir Wikipedia ). Si ce n'est pas le cas, ce serait une simple représentation en base64 de l'image:

$b64image = base64_encode(file_get_contents('path/to/image.png'));

Documents pertinents: base64_encode()- fonction , file_get_contents()- fonction .

34
jwueller

Je suis arrivé à cette question à la recherche d'une solution similaire, en fait, j'ai compris que c'était la question d'origine.

Je voulais faire la même chose, mais le fichier était dans un serveur distant, voici donc ce que j'ai fait:

$url = 'http://yoursite.com/image.jpg';
$image = file_get_contents($url);
if ($image !== false){
    return 'data:image/jpg;base64,'.base64_encode($image);

}

Donc, ce code provient d'une fonction qui retourne une chaîne, et vous pouvez afficher la valeur de retour à l'intérieur du paramètre src d'une balise img en html. J'utilise smarty comme bibliothèque de modèles. Cela pourrait ressembler à ceci:

<img src="<string_returned_by_function>">

Notez l'appel explicite à:

if ($image !== false)

Cela est nécessaire car file_get_contents peut renvoyer 0 et être converti en faux dans certains cas, même si la récupération du fichier a réussi. En fait, dans ce cas, cela ne devrait pas arriver, mais c'est une bonne pratique lors de la récupération du contenu d'un fichier.

12
mcelicalderon

Essayez ceci: -

Exemple un: -

<?php 
function base64_encode_image ($filename=string,$filetype=string) {
    if ($filename) {
        $imgbinary = fread(fopen($filename, "r"), filesize($filename));
        return 'data:image/' . $filetype . ';base64,' . base64_encode($imgbinary);
    }
}
?>

used as so

<style type="text/css">
.logo {
    background: url("<?php echo base64_encode_image ('img/logo.png','png'); ?>") no-repeat right 5px;
}
</style>

or

<img src="<?php echo base64_encode_image ('img/logo.png','png'); ?>"/>

Exemple deux: -

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

Je ne suis pas sûr, mais vérifiez cet exemple http://www.php.net/manual/es/function.base64-encode.php#99842

Cordialement!

1
Lobo