AVE.CMS v3.28
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

214 lines
4.7 KiB

8 years ago
<?php
/**
* AVE.cms
*
* @package AVE.cms
* @version 3.x
* @filesource
* @copyright © 2007-2014 AVE.cms, http://www.ave-cms.ru
*
* @license GPL v.2
*/
/**
* Функция дописывает в JPG файлы IPTC Tag
*
* @param string $rec
* @param string $data
* @param string $value
* @return string
*/
function iptc_make_tag($rec, $data, $value)
{
$length = strlen($value);
$retval = chr(0x1C) . chr($rec) . chr($data);
if($length < 0x8000)
{
$retval .= chr($length >> 8) . chr($length & 0xFF);
}
else
{
$retval .= chr(0x80) .
chr(0x04) .
chr(($length >> 24) & 0xFF) .
chr(($length >> 16) & 0xFF) .
chr(($length >> 8) & 0xFF) .
chr($length & 0xFF);
}
return $retval . $value;
}
/**
* Функция накладывает watermark на заданный файл
*
* @param string $file URL Файла
* @param string $position Позиция
* @param int $transparency Прозарчность
* @return string link
*/
function watermarks($file, $position='center', $transparency=100) {
global $AVE_DB;
if (!defined('WATERMARKS_DIR') || !defined('WATERMARKS_FILE')) exit(0);
$save = true;
$margin = 10;
$file_info = pathinfo($file);
$watermarkFile = BASE_DIR . '/' . WATERMARKS_FILE;
$watermarkDir = BASE_DIR . '/' . WATERMARKS_DIR;
$imagePath = BASE_DIR . '/' . trim($file_info['dirname'], '/');
$imageName = $file_info['basename'];
$copyPath = $watermarkDir . '/' . trim($file_info['dirname'], '/');
$copyName = $imageName;
if(!is_dir($watermarkDir)) {
@mkdir($watermarkDir, 0777, true);
write_htaccess_deny($watermarkDir);
}
if(file_exists("$copyPath/$copyName") || !file_exists("$imagePath/$imageName")){
$save = false;
}
if(file_exists($watermarkFile) && file_exists("$imagePath/$imageName")){
$size_image = getimagesize("$imagePath/$imageName");
$size_wtmrk = getimagesize($watermarkFile);
list($xImage, $yImage) = $size_image;
list($xWtmrk, $yWtmrk) = $size_wtmrk;
if ($xImage < $xWtmrk || $yImage < $yWtmrk) {
$save = false;
} else {
$save = true;
}
}
if (file_exists("$copyPath/$copyName")) $save = false;
if ($save){
if (!is_dir($copyPath) && !@mkdir($copyPath, 0777, true)) exit(0);
require_once BASE_DIR.'/class/class.thumbnail.php';
$watermark = new Image_Toolbox("$imagePath/$imageName");
if (rename("$imagePath/$imageName", "$copyPath/$copyName"))
{
$old = umask(0);
chmod("$copyPath/$copyName", 0777);
umask($old);
}
switch ($position)
{
case 'top':
case 'topcenter':
$xLogoPosition = 'center -';
$yLogoPosition = 'top +'.$margin;
break;
case 'topleft':
$xLogoPosition = 'left +'.$margin;
$yLogoPosition = 'top +'.$margin;
break;
case 'topright':
$xLogoPosition = 'right -'.$margin;
$yLogoPosition = 'top +'.$margin;
break;
case 'center':
$xLogoPosition = 'center -';
$yLogoPosition = 'center -';
break;
case 'centerleft':
$xLogoPosition = 'left +'.$margin;
$yLogoPosition = 'center -';
break;
case 'centerright':
$xLogoPosition = 'right -'.$margin;
$yLogoPosition = 'center -';
break;
case 'bottom':
case 'bottomcenter':
$xLogoPosition = 'center -';
$yLogoPosition = 'bottom -'.$margin;
break;
case 'bottomleft':
$xLogoPosition = 'left +'.$margin;
$yLogoPosition = 'bottom -'.$margin;
break;
case 'bottomright':
$xLogoPosition = 'right -'.$margin;
$yLogoPosition = 'bottom -'.$margin;
break;
case 'repeat':
$xLogoPosition = 'repeat ';
$yLogoPosition = 'repeat ';
break;
default:
$xLogoPosition = 'center -';
$yLogoPosition = 'center -';
break;
}
$watermark->addImage($watermarkFile);
$watermark->blend($xLogoPosition, $yLogoPosition, IMAGE_TOOLBOX_BLEND_COPY, $transparency);
$watermark->save("$imagePath/$imageName");
if($watermark->_img['main']['type']==2){
$image = getimagesize("$imagePath/$imageName", $info);
if(!isset($info['APP13']))
{
$sitename = get_settings('site_name');
// установка IPTC тэгов
$iptc = array(
'2#120' => iconv("UTF-8","WINDOWS-1251",$sitename),
'2#116' => "http://".$_SERVER['SERVER_NAME']
);
// Преобразование IPTC тэгов в двоичный код
$data = '';
foreach($iptc as $tag => $string)
{
$tag = substr($tag, 2);
$data .= iptc_make_tag(2, $tag, $string);
}
// Встраивание IPTC данных
$content = iptcembed($data, "$imagePath/$imageName");
// запись нового изображения в файл
$fp = fopen("$imagePath/$imageName", "wb");
fwrite($fp, $content);
fclose($fp);
}
}
unset($watermark);
}
return $file;
}
?>