. Такое фото создает некий эффект «классики», «старомодности», зрелости.
-- одним словом. Вы не знали? --
и в помине не было.
.
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
..или «За и Против» обоих методов.
В первом примере:
- (
+
) ваше приложение нагружается всего один раз -- когда вы сохраняете изображение; - (
-
) на сервере у вас хранятся черно-белые изображения. Цветных вы из них уже не сделаете.
Во втором примере:
- (
+
) на сервере у вас хранятся цветные изображения. И вы всегда можете выбрать как их отобразить; - (
-
) ваше приложение нагружается каждый раз -- когда вы отдаете черно-белое изображение браузеру.