Você pode me orientar como posso converter uma imagem de uma URL para codificação base64?
Você pode me orientar como posso converter uma imagem de uma URL para codificação base64?
Respostas:
Eu acho que deveria ser:
$path = 'myfolder/myimage.png';
$type = pathinfo($path, PATHINFO_EXTENSION);
$data = file_get_contents($path);
$base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
Fácil:
$imagedata = file_get_contents("/path/to/image.jpg");
// alternatively specify an URL, if PHP settings allow
$base64 = base64_encode($imagedata);
lembre-se de que isso aumentará os dados em 33% e você terá problemas com arquivos cujo tamanho excede o seu memory_limit
.
Use também desta maneira para representar a imagem no formato de codificação base64 ... encontre a função PHP file_get_content
e a próxima a usar a funçãobase64_encode
e obtenha resultado para preparar str como data:" . file_mime_type . " base64_encoded string
. Use-o no atributo img src. veja o código a seguir posso ajudá-lo.
// 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.'">';
<img src="data:image/png;base64,<?php echo base64_encode(file_get_contents("IMAGE URL HERE")) ?>">
Eu estava tentando usar esse recurso, mas continuava recebendo um erro, achei o código acima funcionado perfeitamente.
Apenas substituí o URL de imagem AQUI pelo URL da sua imagem - http://www.website.com/image.jpg
Muito simples e de uso comum:
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="">';
Nota: O tipo MIME do arquivo será adicionado automaticamente (recebendo ajuda desta documentação do PHP ).
Aqui está o código para o upload codificar e salvá-lo no 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 . "')");
}
}
Para mostrar a imagem, use este
echo "<img src='data:image/jpeg;base64, $image' width=300>";
Aqui está um exemplo usando uma chamada cURL. Isso é melhor que a função file_get_contents () . Obviamente, use 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);?>">
curl
absolutamente não é "melhor" do que a file_get_contents
menos que você precise adicionar dados adicionais à chamada ex. autenticação. Além disso, file_get_contents
será possível obter o conteúdo de um arquivo local quando possível, não fazendo assim uma chamada de rede inútil.
Você também pode fazer isso via curl, basta precisar de um caminho para um arquivo de imagem e passá-lo para a função fornecida abaixo.
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;
}