Как конвертировать изображение в base64 на PHP

Вообще data:url полезен для тех, кто хочет отдавать HTML-страницы в виде одного файла. Им в помощь я написал одну функцию на PHP, позволяющую преобразовывать изображения.

Можно ли таким способом уменьшить размер изображения? Увы, нет, изображения, представленные в base64 кодировке как правило на 10-30% больше их бинарного аналога.

Никаких посторонних плагинов или сервисов — чистый PHP.

Были кстати некоторые проблемы с определением MIME-типа. Раньше для этих целей использовалась функция mime_content_type(), вот только теперь она не пашет, к счастью, выход есть всегда, итак:

function insert_base64_encoded_image($img, $echo = false){
	$imageSize = getimagesize($img);
	$imageData = base64_encode(file_get_contents($img));
	$imageHTML = "<img src='data:{$imageSize['mime']};base64,{$imageData}' {$imageSize[3]} />";
	if($echo == true){
		echo $imageHTML;
	} else {
		return $imageHTML;
	}
}
  • $img — это ссылка на изображение, например picture.jpg или dirname(__FILE__) . "/../picture.jpg"
  • $echo — вывести изображение или записать в переменную, кстати, если вам не нужно, чтобы функция возвращала HTML, то её можно слегка доработать:
function insert_base64_encoded_image_src($img, $echo = false){
	$imageSize = getimagesize($img);
	$imageData = base64_encode(file_get_contents($img));
	$imageSrc = "data:{$imageSize['mime']};base64,{$imageData}";
	if($echo == true){
		echo $imageSrc;
	} else {
		return $imageSrc;
	}
}

Функцию как обычно вставляем в functions.php (это для WordPress), а там где нужно вывести изображение, пишем:

insert_base64_encoded_image('picture.jpg', true);

или вот так:

echo insert_base64_encoded_image('picture.jpg');

или даже вот так, но здесь уже не указаны размеры изображения в теге:

<img src="<?php insert_base64_encoded_image_src('picture.jpg', true) ?>" />

Как видите, сгодится любой формат изображений, будь то JPG, PNG, GIF и т.д.

Смотрите также

Комментарии 3

Оставить комментарий / вопрос

phpjsHTMLCSSSQLПросто код
  Комментарии закрыты.