Код: Выбрать все
# проверка размера файла ватермарки и создание времянки нужного размера
function mso_watermark_resize(&$r){
// параметром функции является массив для наложения ватермарки, передаваемый по ссылке
// внося в него изменения мы добиваемся нужного эффекта
// получаем размеры картинок
list($sw,$sh)=getimagesize($r['source_image']);
list($ww,$wh)=getimagesize($r['wm_overlay_path']);
// вычисляем отношение ватермарки по правилу
// - высота не более 25%
// - ширина не более 80%
// 2Макс - можно сделать и в опциях, чтобы более гибко было
// пример расчета
// размер картинки sw 400
// sh 600
// размер марки ww 800
// wh 240
//
// вычисляем максимальный размер марки по каждой стороне, не более 80% по ширине и 25% по высоте
// mwW (sw*0,8) 320
// mwH (sh*0,25) 150
// вычисляем отношения по каждой из сторон для новой искаженной марки
// Dw (mwW/ww) 0,4
// Dh (mwH/wh) 0,625
// берем меньшее значение
// d 0,4
// вычисляем размер марки
// nwW (ww*d) 320
// nwH (wh*d) 96
// новое имя ватермарки watermark1.png,
// его после наложения можно убирать, можно оставлять, при каждой загрузке будет меняться
$fileNew = preg_replace('/\.png$/i',"1.png",$r['wm_overlay_path']);
$mwW=$sw*0.8;
$mwH=$sh*0.25;
$Dw=$mwW/$ww;
$Dh=$mwH/$wh;
$Dw>$Dh?$d=$Dh:$d=$Dw;
$nwW=$ww*$d;
$nwH=$wh*$d;
// теперь ресайзим ватермарку
$r_conf = array(
'image_library' => 'gd2',
'source_image' => $r['wm_overlay_path'],
'new_image' => $fileNew,
'maintain_ratio' => true,
'width' => $nwW,
'height' => $nwH,
);
$CI = & get_instance();
$CI->image_lib->initialize($r_conf );
if (!$CI->image_lib->resize()){
echo '<div class="error">' . t('Изменение размера watermark:') . ' ' . $CI->image_lib->display_errors() . '</div>';
}else{
$r['wm_overlay_path']=$fileNew;
}
}
Код: Выбрать все
$r_conf = array(
'image_library' => 'gd2',
'source_image' => $up_data['full_path'],
'new_image' => $up_data['full_path'],
'wm_type' => 'overlay',
'wm_vrt_alignment' => $vrt,
'wm_hor_alignment' => $hor,
'wm_overlay_path' => $r['userfile_water_file'] //Жёстко, а что делать?
);
// меняем размер ватермарки
mso_watermark_resize($r_conf);
$CI->image_lib->initialize($r_conf );
if (!$CI->image_lib->watermark())
echo '<div class="error">' . t('Водяной знак:') . ' ' . $CI->image_lib->display_errors() . '</div>';
Пользователь просматривает форум: нет зарегистрированных пользователей