Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Изменение размера картинок и добавление водяных знаков
 
 автор: Zlobik   (17.06.2009 в 22:44)   письмо автору
 
 

Здравствуйте. Есть код, который уменьшает картинки, помогите его дополнить, чтобы на картинки накладывались водяные знаки методом 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$source0000$newwidth$newheight$width$height);
    
    
//Вывод
    
imagejpeg ($thumb''100)
?>

  Ответить  
 
 автор: Петр   (18.06.2009 в 09:07)   письмо автору
 
   для: 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$src00round((max($w_src,$h_src)-min($w_src,$h_src))/2), 0$width$heightmin($w_src,$h_src), min($w_src,$h_src));
        
// Масштабируем изображение и вырезаем квадратную серединку по оси Y, если фото вертикальное;
        
if ($w_src $h_src)
            
imagecopyresampled($dest$src000round((max($w_src,$h_src)-min($w_src,$h_src))/2), $width$heightmin($w_src,$h_src), min($w_src,$h_src));
        
// Масштабируем изображение без вырезок, если фото квадратное
        
if ($w_src == $h_src)
            
imagecopyresampled($dest$src0000$width$height$w_src$w_src);
    } else {
        
// Создаём пустую картинку;
        
$dest imagecreatetruecolor($w_dest$h_dest);
        
// Масштабируем изображение;
        
imagecopyresampled($dest$src0000$w_dest$h_dest$w_src$h_src);
    }
    
// Сохраняем исходный файл;
    
imagejpeg($dest$file100);
    
// Удаляем переменные изображений;
    
imagedestroy($dest);
    
imagedestroy($src);
}
// Копирование изображения;
function image_copy($file$copy$width false$height false) {
    
// Поиск файла;
    
if (!file_exists($file)) return false;
    
// Копирование файла;
    
copy($file,$copy);
    
// Уменьшение размера копии;
    
if ($widthimage_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_y00$img_size[0], $img_size[1]);
    
// Сохраняем исходный файл;
    
imagejpeg($img$file100);
}
?>

Пример использования:
<?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);
}
?>

  Ответить  
 
 автор: Zlobik   (18.06.2009 в 12:30)   письмо автору
 
   для: Петр   (18.06.2009 в 09:07)
 

Спасибо, но нельзя ли все же на основе моего кода добавлять "водяные знаки"?

  Ответить  
 
 автор: Петр   (18.06.2009 в 12:36)   письмо автору
 
   для: 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]);

  Ответить  
 
 автор: Zlobik   (18.06.2009 в 13:35)   письмо автору
 
   для: Петр   (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$source0000$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_y00$width$height); 
    
    
//Вывод
    
imagejpeg ($thumb''100);    
    
?>

  Ответить  
 
 автор: Петр   (19.06.2009 в 06:29)   письмо автору
 
   для: Zlobik   (18.06.2009 в 13:35)
 

А с локальным файлом пробовали? Возможно нужен именно файл на том же сервере (одна файловая система).

и вообще рекомендую сжимать фотки и делать их копии (накладывать логотип) при загрузке на сервер, а не каждый раз при выводе. Так конечно удобно, в случае чего изменил код и ВСЕ картинки стали выводится как нужно, но зато очень тормазит. Сразу лучше определись как они должны выглядеть.
imagejpeg($img, $file, 100);

  Ответить  
 
 автор: Zlobik   (20.06.2009 в 06:51)   письмо автору
 
   для: Петр   (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$source0000$newwidth$newheight$width$height);
    
    
$white imagecolorallocatealpha($thumb25525525570);
    
$font '/hosting/clients/avtomotokniga.ru/httpd/htdocs/font/METRO.TTF';
    
    
imagettftext ($thumb1431500$white$font'AvtoMotoKniga.ru (c)');
    
    
imageinterlace ($thumb1);
        
    
// 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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования