*Это прекрасно видно на черно-белых снимках ;)
И тем не менее пример из недавней практики -- как сделать цветное изображение черно-белым на PHP с помощью библиотеки GD.function grayscale($filename){
//Получаем размеры изображения
$img_size = GetImageSize($filename);
$width = $img_size[0];
$height = $img_size[1];
//Создаем новое изображение с такмими же размерами
$img = imageCreate($width,$height);
//Задаем новому изображению палитру "оттенки серого" (grayscale)
for ($c = 0; $c < 256; $c++) {
ImageColorAllocate($img, $c,$c,$c);
}
//Содаем изображение из файла Jpeg
$img2 = ImageCreateFromJpeg($filename);
//Объединяем два изображения
ImageCopyMerge($img,$img2,0,0,0,0, $width, $height, 100);
//Сохраняем полученное изображение
imagejpeg($img, $filename);
//Освобождаем память, занятую изображением
imagedestroy($img);
}
Этот метод сохраняет изображения в черно-белой гамме. Например, при загрузке файлов на сервер.
Если же, к примеру, у вас на сервере хранятся цветные изображения, а вам по некоторым причинам решительно захотелось «отдать» их браузеру как черно-белые. Воспользуйтесь следующей модификацией этого метода:
function show_grayscale($filename){
$img_size = GetImageSize($filename);
$width = $img_size[0];
$height = $img_size[1];
$img = imageCreate($width,$height);
for ($c = 0; $c < 256; $c++) {
ImageColorAllocate($img, $c,$c,$c);
}
$img2 = ImageCreateFromJpeg($filename);
ImageCopyMerge($img,$img2,0,0,0,0, $width, $height, 100);
//Отдаем полученное изображение браузеру
header("Content-type: image/jpeg");
imagejpeg($img);
imagedestroy($img);
}
Pro et Contra
..или «За и Против» обоих методов.В первом примере:
- (
+
) ваше приложение нагружается всего один раз -- когда вы сохраняете изображение; - (
-
) на сервере у вас хранятся черно-белые изображения. Цветных вы из них уже не сделаете.
Во втором примере:
- (
+
) на сервере у вас хранятся цветные изображения. И вы всегда можете выбрать как их отобразить; - (
-
) ваше приложение нагружается каждый раз -- когда вы отдаете черно-белое изображение браузеру.
4 Комментариев :
Отличный код. А на счет плюсов и минусов, лучше пользоваться первым методом, просто делать копию изображения и ее делать черно-белой, а оригинал останется цветным
Спасибо. Как всегда, оптимальный вариант находится где-то между.
Оставлять оригинал – вообще полезная практика. Мы в одном рельсовом проекте нарезали из пользовательских изображений порядка 3-х видов тумбнайлзов с помощью file_column и ImageMagick. Оригинал при этом сохранялся, что прямо-таки спасло. Ибо размеры изображений с тех пор изменялись еще раза три.
Помогите плиз. У меня почему то идет расспечатка рисунка в символах и ошибка в этой строке header("Content-type: image/jpeg"); что делать ? gd2 подключен
GD Support enabled
GD Version bundled (2.0.34 compatible)
FreeType Support enabled
FreeType Linkage with freetype
FreeType Version 2.1.9
T1Lib Support enabled
GIF Read Support enabled
GIF Create Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled
XBM Support enabled
Ошибка в строке header("Content-type: image/jpeg"); скорей всего указывает на то, что какие-то данные уже были отправлены на вывод браузеру.
Результат функции должен выводиться как изображение и никаких других данных не выдавать.
/* Самому бы не запутаться :) */
<img src="show.php?id=14" />
show.php – это файл скрипта, «одающий» картинку.
Отправить комментарий
Жги!