|
|
|
| Здравствуйте. Есть код, который уменьшает картинки, помогите его дополнить, чтобы на картинки накладывались водяные знаки методом imagefttext() Привожу код:
<?
$img = $HTTP_GET_VARS['b'];
// File and new size
$filename = "http://avtomotokniga.ru/pictures/big_pict/$img.jpg";
$percent = 0.5;
// Устанавливаем заголовок
header ('Content-type: image/Jpeg');
// Get new sizes
list($width, $height) = getimagesize($filename);
$newwidth = $width * $percent;
$newheight = $height * $percent;
// Load
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filename);
// Resize
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
//Вывод
imagejpeg ($thumb, '', 100)
?>
|
| |
|
|
|
|
|
|
|
для: Zlobik
(17.06.2009 в 22:44)
| | Вот моя библиотека для обработки изображений (основные функции)
<?php
// Загрузка изображений;
function image_upload($file, $filename) {
// Проверка расширения;
$fileinfo = pathinfo(strtolower($filename));
if (in_array($fileinfo['extension'], array('jpg'))) {
// Загрузка файла на сервер;
if (move_uploaded_file($file, $filename)) return true;
}
// Выход;
return false;
}
// Изменение размеров изображений;
function image_resize($file, $width, $height = false) {
// Создаём изображение на основе исходного файла;
if (!file_exists($file)) return false;
$src = imagecreatefromjpeg($file);
// Опеределяем его размеры изображения;
$w_src = imagesx($src);
$h_src = imagesy($src);
if ($w_src <= $width and $h_src <= $height) return false;
// Вычисляем масштаб;
$ratio = $height ? max($w_src/$width, $h_src/$height) : $w_src/$width;
// Вычисляем пропорции;
$w_dest = round($w_src/$ratio);
$h_dest = round($h_src/$ratio);
// Операции для получения квадратного изображения;
if ($width == $height) {
// Создаём пустую квадратную картинку;
$dest = imagecreatetruecolor($width,$height);
// Масштабируем изображение и вырезаем квадратную серединку по оси X, если фото горизонтальное;
if ($w_src > $h_src)
imagecopyresampled($dest, $src, 0, 0, round((max($w_src,$h_src)-min($w_src,$h_src))/2), 0, $width, $height, min($w_src,$h_src), min($w_src,$h_src));
// Масштабируем изображение и вырезаем квадратную серединку по оси Y, если фото вертикальное;
if ($w_src < $h_src)
imagecopyresampled($dest, $src, 0, 0, 0, round((max($w_src,$h_src)-min($w_src,$h_src))/2), $width, $height, min($w_src,$h_src), min($w_src,$h_src));
// Масштабируем изображение без вырезок, если фото квадратное
if ($w_src == $h_src)
imagecopyresampled($dest, $src, 0, 0, 0, 0, $width, $height, $w_src, $w_src);
} else {
// Создаём пустую картинку;
$dest = imagecreatetruecolor($w_dest, $h_dest);
// Масштабируем изображение;
imagecopyresampled($dest, $src, 0, 0, 0, 0, $w_dest, $h_dest, $w_src, $h_src);
}
// Сохраняем исходный файл;
imagejpeg($dest, $file, 100);
// Удаляем переменные изображений;
imagedestroy($dest);
imagedestroy($src);
}
// Копирование изображения;
function image_copy($file, $copy, $width = false, $height = false) {
// Поиск файла;
if (!file_exists($file)) return false;
// Копирование файла;
copy($file,$copy);
// Уменьшение размера копии;
if ($width) image_resize($copy, $width, $height);
}
// Наложение изображения;
function image_copyright($file) {
// ;
if (!file_exists($file)) return false;
$img = imagecreatefromjpeg($file);
// Размеры изображения;
$img_size = getimagesize($file);
// Проверка размера изображения;
if ($img_size[0]<200 or $img_size[1]<200) return false;
// Координаты изображения;
$bg_x = $img_size[0]-100;
$bg_y = $img_size[1]-100;
// Загрузка лого;
$src = $_SERVER['DOCUMENT_ROOT'].'/images/logo.png';
$logo = imagecreatefrompng($src);
// Копирование изображения;
imagecopy($img, $logo, $bg_x, $bg_y, 0, 0, $img_size[0], $img_size[1]);
// Сохраняем исходный файл;
imagejpeg($img, $file, 100);
}
?>
|
Пример использования:
<?php
// Имя файла;
$filename = $_SERVER['DOCUMENT_ROOT'].'/images/'.'xxx';
// Имя копии файла (уменьшенного варианта);
$filecopy = $_SERVER['DOCUMENT_ROOT'].'/images/'.'xxx_min';
// Загрузка изображения;
if (image_upload($_FILES['image']['tmp_name'],$filename)) {
// Уменьшение изображения;
image_resize($filename,800,600);
// Создание копии изображения;
image_copy($filename,$filecopy,80,80);
// Наложение изображения;
image_copyright($filename);
}
?>
|
| |
|
|
|
|
|
|
|
для: Петр
(18.06.2009 в 09:07)
| | Спасибо, но нельзя ли все же на основе моего кода добавлять "водяные знаки"? | |
|
|
|
|
|
|
|
для: Zlobik
(18.06.2009 в 12:30)
| | Конечно можно, достаточно вставить в ваш код перед выводом изображения некоторые операторы из моей последней функции.
$img - указатель на ваше изображение
$file - имя файла (путь)
// Размеры изображения;
$img_size = getimagesize($file);
// Координаты изображения;
$bg_x = $img_size[0]-100;
$bg_y = $img_size[1]-100;
// Загрузка лого;
$src = $_SERVER['DOCUMENT_ROOT'].'/images/logo.png';
$logo = imagecreatefrompng($src);
// Копирование изображения;
imagecopy($img, $logo, $bg_x, $bg_y, 0, 0, $img_size[0], $img_size[1]); | |
|
|
|
|
|
|
|
для: Петр
(18.06.2009 в 12:36)
| | Попробовал вот так, но чего то не получилось. Изображение уменьшилось, но logo не наложилось. Если не трудно, укажите на ошибку.
<?
$img = $HTTP_GET_VARS['b'];
// File and new size
$filename = "http://avtomotokniga.ru/pictures/big_pict/$img.jpg";
$percent = 0.5;
// Content type
header ('Content-type: image/Jpeg');
// Get new sizes
list($width, $height) = getimagesize($filename);
$newwidth = $width * $percent;
$newheight = $height * $percent;
// Load
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filename);
// Resize
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
//$img - указатель на ваше изображение
//$filename - имя файла (путь)
// Размеры изображения;
list($width, $height) = getimagesize($filename);
// Координаты изображения;
$bg_x = $width - 50;
$bg_y = $height - 50;
// Загрузка лого;
$src = 'http://avtomotokniga.ru/image/cancel.jpg';
$logo = imagecreatefromJpeg($src);
// Копирование изображения;
imagecopy($thumb, $logo, $bg_x, $bg_y, 0, 0, $width, $height);
//Вывод
imagejpeg ($thumb, '', 100);
?>
|
| |
|
|
|
|
|
|
|
для: Zlobik
(18.06.2009 в 13:35)
| | А с локальным файлом пробовали? Возможно нужен именно файл на том же сервере (одна файловая система).
и вообще рекомендую сжимать фотки и делать их копии (накладывать логотип) при загрузке на сервер, а не каждый раз при выводе. Так конечно удобно, в случае чего изменил код и ВСЕ картинки стали выводится как нужно, но зато очень тормазит. Сразу лучше определись как они должны выглядеть.
imagejpeg($img, $file, 100); | |
|
|
|
|
|
|
|
для: Петр
(19.06.2009 в 06:29)
| | Спасибо Петр за уделенное время. В итоге после после продолжительных танцев с бубном заработал следующий код:
<?
$img = $HTTP_GET_VARS['b'];
// File and new size
$filename = "http://avtomotokniga.ru/pictures/big_pict/$img.jpg";
//$filename = "http://avtomotokniga.ru/pictures/big_pict/142030.jpg";
//$watermark = "http://avtomotokniga.ru/image/cancel.jpg";
$percent = 0.55;
// Get new sizes
list($width, $height) = getimagesize($filename);
$newwidth = $width * $percent;
$newheight = $height * $percent;
// Load
$thumb = imagecreatetruecolor($newwidth, $newheight);
$source = imagecreatefromjpeg($filename);
imagecopyresampled($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
$white = imagecolorallocatealpha($thumb, 255, 255, 255, 70);
$font = '/hosting/clients/avtomotokniga.ru/httpd/htdocs/font/METRO.TTF';
imagettftext ($thumb, 14, 315, 0, 0, $white, $font, 'AvtoMotoKniga.ru (c)');
imageinterlace ($thumb, 1);
// Content type
header ('Content-type: image/Jpeg');
//Вывод
imagejpeg ($thumb, '', 100)
?>
<!-- <img src='http://new.avtomotokniga.ru/image05.php?img=$thumb'> -->
|
Все что в комментария - это для отладки. Насчет "тормозит" - если не сложно посмотрите здесь:http://avtomotokniga.ru/_store.php?a=kia | |
|
|
|
|