public static function putWatermark_file ( $filepath, $watermark, $mode = 0 ) {
$nc_core = nc_Core::get_object();
// исходный файл
if (!file_exists($filepath ) ) {
$filepath = $nc_core->DOCUMENT_ROOT.$nc_core->SUB_FOLDER.$filepath;
}
if ( !file_exists($filepath) ) {
trigger_error("File ".$filepath." not found.", E_USER_WARNING);
return;
}
$src = getimagesize($filepath);
$src_w = $src[0]; // ширина
$src_h = $src[1]; // высота
$src_type = strtolower(substr($src['mime'], strpos($src['mime'], '/')+1)); // тип
// в зависимости от типа - разные функции
$func = function_exists("imagecreatefrom".$src_type) ? "imagecreatefrom".$src_type : "imagecreatefromjpeg";
// ресурс
$img_src = $func($filepath);
// ватермарк
if (!file_exists($watermark ) ) {
$watermark = $nc_core->DOCUMENT_ROOT.$nc_core->SUB_FOLDER.$watermark;
}
if ( !file_exists($watermark) ) {
trigger_error("File ".$watermark." not found.", E_USER_WARNING);
return;
}
$water = getimagesize($watermark);
$water_w = $water[0]; // ширина
$water_h = $water[1]; // высота
$water_type = strtolower(substr($water['mime'], strpos($water['mime'], '/')+1)); // тип
// в зависимости от типа - разные функции
$func = function_exists("imagecreatefrom".$water_type) ? "imagecreatefrom".$water_type : "imagecreatefromjpeg";
// ресурс
$img_water = $func($watermark);
// результат
$img = imagecreatetruecolor($src_w, $src_h);
// копируем в результат исходное изображение
imagecopyresampled($img, $img_src, 0, 0, 0, 0, $src_w, $src_h, $src_w, $src_h);
// опрделяем, куда копировать ватермарк
switch ( $mode ) {
case 1 : // левый верхний угол
$x = $y = 3; // c небольшим сдвигом
break;
case 2: // правый верхний угол
$x = $src_w - $water_w - 3;
$y = 3;
break;
case 3: // левый низ
$y = $src_h - $water_h - 3;
$x = 3;
break;
case 4: // правый низ
$x = $src_w - $water_w - 3;
$y = $src_h - $water_h - 3;
break;
default: // по центру
$x = floor(($src_w - $water_w) / 2);
$y = floor(($src_h - $water_h) / 2);
}
if ( $x < 0 ) $x = 0;
if ( $y < 0 ) $y = 0;
// копируем ватермарк
imagecopy($img, $img_water, $x, $y, 0, 0, $water_w, $water_h);
//записываем в файл
$func = function_exists("image".$src_type) ? "image".$src_type : "imagejpg";
// можно задать качество
if ( func == "imagejpeg" || $func == "imagepng") {
$r = $func($img, $filepath, 95);
}
else {
$r = $func($img, $filepath);
}
imagedestroy($img);
imagedestroy($img_src);
imagedestroy($img_water);
return $r;
}
public static function putWatermark ( $classID, $field, $message, $watermark, $mode = 0 ) {
global $nc_core, $db;
$message = intval($message);
$src = nc_file_path($classID, $message, $field);
if ( !$src ) return false;
// вставляем ватермарк
self::putWatermark_file($src, $watermark, $mode);
// теперь нужно обновить размер
$systemTableID = 0;
$system_tables = array("Catalogue" => 1,"Subdivision" => 2, "User" => 3, "Template" => 4);
// определяем таблицу и первичный ключ в ней
if ( !is_int($classID) ) {
$table = $db->escape($classID);
$pk = $db->escape($classID)."_ID";
$systemTableID = $system_tables[$classID];
}
else {
$table = "Message".intval($classID);
$pk = "Message_ID";
}
// определяем номер поля и его имя
if ( is_int($field ) ) {
$field_id = intval($field);
$field_name = $db->get_var("SELECT `Field_Name` FROM `Field` WHERE `Field_ID` = '".$field_id."' ");
}
else {
$field_name = $db->escape($field);
$field_id = $db->get_var("SELECT `Field_ID` FROM `Field` WHERE `Field_Name` = '".$field_name."' AND ".( $systemTableID ? "`System_Table_ID` = '".$systemTableID."'" : "`Class_ID` = '".$classID."' ")." ");
}
// новое значение
clearstatcache();
$filesize = filesize($nc_core->DOCUMENT_ROOT.$src);
$old_value = $db->get_var("SELECT `".$field_name."` FROM `".$table."` WHERE `".$pk."` = '".$message."' ");
$new_value = preg_replace("/:(\d+:(/", ':'.$filesize.':', $old_value);
$new_value = preg_replace("/:(\d+)$/", ':'.$filesize, $new_value);
$db->query("UPDATE `".$table."` SET `".$field_name."` = '".$db->escape($new_value)."' WHERE `".$pk."` = '".$message."' ");
// и в таблице Filetable
$db->query("UPDATE `Filetable` SET `File_Size` = '".$filesize."' WHERE `Message_ID` = '".$message."' AND `Field_ID` = '".$field_id."' ");
return true;
}
}