Jak przekonwertować obraz na kodowanie base64?

290

Czy możesz mi pomóc, jak przekonwertować obraz z adresu URL na kodowanie base64?

Volatil3
źródło
3
Po co chcesz to robić?
Pekka
7
osadzić go w atrybucie src znacznika Img
Volatil3,
5
To jest stary wątek, ale dla kompletności: sensowne jest kodowanie obrazów, zwłaszcza małych (poniżej 1k), do użycia w css. W ten sposób zapisujesz jedno żądanie, które może potrwać dłużej, a może być jeszcze większe ze względu na obciążenie.
arminrosu

Odpowiedzi:

573

Myślę, że powinno to być:

$path = 'myfolder/myimage.png';
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
Ronny Sherer
źródło
10
To zależy od tego, do czego potrzebujesz obrazu. Jeśli jest to wbudowany adres URL, jest to odpowiedni sposób. Nie jest to jednak identyczne ze zwykłym kodowaniem base64.
Pekka
Doskonała wskazówka, teraz utworzę funkcję edycji pliku do przesłania lub przywróć plik move_uploaded_file (), dzięki
Vinicius De Jesus
121

Łatwo:

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

pamiętaj, że zwiększy to dane o 33%, a będziesz mieć problemy z plikami, których rozmiar przekracza twój memory_limit.

Pekka
źródło
1
@anna to robi! Generalnie wystarczy kodowanie Base64.
Pekka
38

Skorzystaj również w ten sposób, aby przedstawić obraz w formacie kodowania base64 ... znajdź funkcję PHP, file_get_contenta następnie użyj funkcjibase64_encode

i uzyskaj wynik, aby przygotować str data:" . file_mime_type . " base64_encoded string. Użyj go w atrybucie img src. zobacz poniższy kod, czy mogę ci pomóc.

// 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
źródło
1
Jeśli nie udało się znaleźć funkcji mime_content_type, po prostu dodaj funkcję z svogal z php.net/manual/en/function.mime-content-type.php
mario ruiz
15

Na wypadek, gdybyś (z jakiegokolwiek powodu) nie był w stanie używać curlani file_get_contentsnie możesz obejść:

$img = imagecreatefrompng('...');
ob_start();
imagepng($img);
$bin = ob_get_clean();
$b64 = base64_encode($bin);
yckart
źródło
10
<img src="data:image/png;base64,<?php echo base64_encode(file_get_contents("IMAGE URL HERE")) ?>">

Próbowałem użyć tego zasobu, ale ciągle pojawiał się błąd, ale powyższy kod działał idealnie.

Właśnie zastąpiłem IMAGE URL TUTAJ URL twojego obrazu - http://www.website.com/image.jpg

GoldenGonaz
źródło
6

Bardzo prosty i powszechnie stosowany:

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

Uwaga: Typ Mime pliku zostanie dodany automatycznie (korzystając z pomocy tej dokumentacji PHP ).

Reza Mamun
źródło
3

Oto kod do przesłania w celu zakodowania i zapisania go w 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 . "')");
    }
}

Do wyświetlenia obrazu użyj tego

echo "<img src='data:image/jpeg;base64, $image' width=300>";
Vivek
źródło
10
To nie było wymagane.
AlexioVay,
1

Oto przykład użycia wywołania cURL. Jest to lepsze niż funkcja file_get_contents () . Oczywiście użyj 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
źródło
1
curlabsolutnie nie jest „lepszy” niż, file_get_contentschyba że musisz dodać dodatkowe dane do połączenia np. poświadczenie. Co więcej, file_get_contentscofnie się do uzyskania zawartości lokalnego pliku, gdy to możliwe, nie wykonując bezużytecznego połączenia sieciowego.
Hissvard,
1

Możesz to również zrobić za pomocą curl, po prostu potrzebujesz ścieżki do pliku obrazu i przekaż go do funkcji podanej poniżej.

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
źródło