[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Изменить размер фото и наложить водяной знак
Страницы: 1, 2
nikki4
Надоело в ручную прогонять фотки для кулинарного сайта через софт, который ставит водяной знак и изменяет размер. Решил найти способ как сделать это автоматом.


нашел скрипт сжатия фотки:
<?php
$size=GetImageSize ("1.jpg");
$src=ImageCreateFromJPEG ("1.jpg");
$iw=$size[0];
$ih=$size[1];
$koe=$iw/800;
$new_h=ceil ($ih/$koe);
$dst=ImageCreateTrueColor (800, $new_h);
ImageCopyResampled ($dst, $src, 0, 0, 0, 0, 800, $new_h, $iw, $ih);
ImageJPEG ($dst, "small_photo.jpg", 100);
imagedestroy($src);
?>


нашел скрипт наложения водяного знака
<?php
// Скрипт скачен с wdda.pro

// Путь до файла с оригинальным изображением

$path = $_SERVER['DOCUMENT_ROOT'].$_SERVER['REQUEST_URI'];
$nameImage = end(explode('/', $_SERVER['REQUEST_URI'])); // Имя изображения
$nameImageId = md5($path) . $nameImage;

// Проверяем дату для рефреша кеша
$dateImage = filemtime($path);
$dateImageCache = @filemtime($_SERVER['DOCUMENT_ROOT'] . "/watermark/cache/" . $nameImageId);

//Устанавливаем качество (вес) картинки на выходе
$quality = 100;

if(file_exists('cache/' . $nameImageId) && $dateImage < $dateImageCache)
{
$image = imagecreatefromstring(file_get_contents('cache/' . $nameImageId));
header('Content-type: image/jpeg');
imagejpeg($image, NULL, $quality);
exit();
}
else // Если же нет такой картинки в кэше
{
// Загружаем оригинальное изображение
$image = imagecreatefromstring(file_get_contents($path));

// Получаем ширину и высоту оригинально изображения
$w = imagesx($image);
$h = imagesy($image);

// Загружаем изображение с водяным знаком
$watermark = imagecreatefrompng('watermark.png');

//Вместо 235 можете поставить свое значение, это размер для маленьких фото для них будет испольщоваться маленький ватермарк
if($w == 235)
{
$watermark = imagecreatefrompng('watermark_m.png');
}

// Получаем ширину и высоту водяного знака
$ww = imagesx($watermark);
$wh = imagesy($watermark);

// Соединяем оригинальное изображение и водяной знак.(водяной знак будет расположен в нижнем правом углу), можете попробовать его двигать меняя 10 и 5.
imagecopy($image, $watermark, $w-$ww-10, $h-$wh-5, 0, 0, $ww, $wh);

imagealphablending($image, false);
imagesavealpha($image, true); // Устанавливаем прозрачность для png файла

//Изменив значение 100, вы можете снизить качество получаемого фото

imagejpeg($image, 'cache/' . $nameImageId, $quality);
header('Content-type: image/jpeg');
imagejpeg($image, NULL, $quality);
exit();
}
?>




Попытался их соединить. Итог: фотка сжимается, но водяной знак не ставится
$koe=$w/800;
$new_h=ceil ($h/$koe);
$newimage=ImageCreateTrueColor (800, $new_h);
ImageCopyResampled ($newimage, $image, 0, 0, 0, 0, 800, $new_h, $w, $h);
// Соединяем новое изображение и водяной знак.(водяной знак будет расположен в нижнем правом углу), можете попробовать его двигать меняя 10 и 5.
imagecopy($newimage, $watermark, $w-$ww-15, $h-$wh-10, 0, 0, $ww, $wh);

}
imagealphablending($newimage, false);
imagesavealpha($newimage, true); // Устанавливаем прозрачность для png файла

//Изменив значение 100, вы можете снизить качество получаемого фото

imagejpeg($newimage, 'cache/' . $nameImageId, $quality);
header('Content-type: image/jpeg');
imagejpeg($newimage, NULL, $quality);
exit();



В качестве теста скрипта вставил не первый скрипт во второй, а наоборот, но все так же водяной знак не наносится
<?php

$watermark = imagecreatefrompng('watermark.png');
$ww = imagesx($watermark);
$wh = imagesy($watermark);


$size=GetImageSize ("1.jpg");
$src=ImageCreateFromJPEG ("1.jpg");
$iw=$size[0];
$ih=$size[1];
$koe=$iw/800;
$new_h=ceil ($ih/$koe);
$dst=ImageCreateTrueColor (800, $new_h);
ImageCopyResampled ($dst, $src, 0, 0, 0, 0, 800, $new_h, $iw, $ih);
imagecopy($src, $watermark, $iw-$ww-15, $ih-$wh-10, 0, 0, $ww, $wh);
imagealphablending($dst, false);
imagesavealpha($dst, true); // Устанавливаем прозрачность для png файла

ImageJPEG ($dst, "small_photo.jpg", 100);

imagedestroy($src);
?>


Да и еще, странно, что готового скрипта, который это делает - почему-то не нашел. Может это как-то по другому делается?

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

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.