mirror of https://github.com/avecms/AVE.cms.git
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
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;
|
||
|
}
|
||
|
|
||
|
?>
|