Comment convertir une image en encodage base64?


290

Pouvez-vous s'il vous plaît me guider comment convertir une image d'une URL en encodage base64?


3
Pourquoi voulez-vous faire cela?
Pekka

7
pour l'intégrer dans l'attribut src de la balise Img
Volatil3

5
C'est un vieux fil, mais pour être complet: il est très logique d'encoder des images, en particulier les petites (moins de 1k), pour une utilisation en CSS. De cette façon, vous enregistrez une demande, ce qui prendrait plus de temps et pourrait être encore plus important, en raison des frais généraux.
arminrosu

Réponses:


572

Je pense que ça devrait être:

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

10
Cela dépend de ce dont vous avez besoin de l'image. S'il s'agit d'une URL en ligne, c'est la voie à suivre. Ce n'est pas identique au simple encodage base64.
Pekka

Excellente astuce, maintenant je vais créer une fonction pour éditer le téléchargement de fichiers, ou revenir à move_uploaded_file (), merci
Vinicius De Jesus

121

Facile:

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

gardez à l'esprit que cela agrandira les données de 33% et vous aurez des problèmes avec les fichiers dont la taille dépasse la vôtre memory_limit.


1
@anna c'est le cas! Le codage Base64 fera généralement cela.
Pekka

38

Utilisez également cette façon de représenter l'image au format de codage base64 ... trouver la fonction PHP file_get_contentet à côté de la fonctionbase64_encode

et obtenir le résultat pour préparer str data:" . file_mime_type . " base64_encoded string. Utilisez-le dans l'attribut img src. voir le code suivant puis-je vous aider.

// 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
Si vous ne parvenez pas à trouver la fonction mime_content_type, ajoutez simplement la fonction de svogal à partir de php.net/manual/en/function.mime-content-type.php
mario ruiz

15

Au cas où vous seriez (pour une raison quelconque) incapable d'utiliser curlni file_get_contents, vous pouvez contourner:

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

J'essayais d'utiliser cette ressource mais continuais à recevoir une erreur, j'ai trouvé que le code ci-dessus fonctionnait parfaitement.

Vous venez de remplacer l'URL D'IMAGE ICI par l'URL de votre image - http://www.website.com/image.jpg


6

Très simple et à utiliser couramment:

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

Remarque: Le type MIME du fichier sera ajouté automatiquement (en prenant l'aide de ce documentation PHP ).


3

Voici le code à télécharger pour l'encoder et l'enregistrer sur 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 . "')");
    }
}

Pour afficher l'image, utilisez ceci

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

10
Cela n'a pas été demandé.
AlexioVay

1

Voici un exemple utilisant un appel cURL. C'est mieux que la fonction file_get_contents () . Bien sûr, utilisez 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
curln'est absolument pas "mieux" que file_get_contentssi vous n'avez pas besoin d'ajouter des données supplémentaires à l'appel par ex. authentification. De plus, cela file_get_contentsreviendra à obtenir le contenu d'un fichier local lorsque cela sera possible, ne faisant donc pas un appel réseau inutile.
Hissvard

1

Vous pouvez également le faire via curl, il vous suffit d'avoir un chemin vers un fichier image et de le passer à la fonction indiquée ci-dessous.

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;

}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.