function imagepicker_watermark_do in Image Picker 7
Same name and namespace in other branches
- 6.2 imagepicker.imagefuncs.inc \imagepicker_watermark_do()
Adapted from watermark module.
Parameters
string $image_path:
user object $account:
Return value
string|string|string|string
3 calls to imagepicker_watermark_do()
- imagepicker_copy_form_submit in ./
imagepicker.functions.inc - Function to submit the copy form
- imagepicker_import_batch in ./
imagepicker.import.inc - imagepicker_upload_form_submit in ./
imagepicker.upload.inc - Submit form
File
- ./
imagepicker.imagefuncs.inc, line 47 - @author Bob Hutchinson http://drupal.org/user/52366 @copyright GNU GPL
Code
function imagepicker_watermark_do($image_path, $account = FALSE, $perc = '') {
if ($account) {
$user = $account;
}
else {
global $user;
}
$watermark_path = imagepicker_variable_get('imagepicker_watermark_image', FALSE);
$use_global_watermark = $watermark_path ? TRUE : FALSE;
if (!$watermark_path) {
$watermark_path = imagepicker_variable_get('imagepicker_watermark_image', FALSE, $account->uid);
}
if (!$watermark_path) {
return FALSE;
}
// init return status
$status = FALSE;
if ($use_global_watermark) {
$scaling = imagepicker_variable_get('imagepicker_watermark_scaling', FALSE);
$position = imagepicker_variable_get('imagepicker_watermark_position', 0);
}
else {
$scaling = imagepicker_variable_get('imagepicker_watermark_scaling', FALSE, $account->uid);
$position = imagepicker_variable_get('imagepicker_watermark_position', 0, $account->uid);
$wdir = imagepicker_get_watermarks_dir($user);
$watermark_path = $wdir . DIRECTORY_SEPARATOR . $watermark_path;
}
if (!($wm_info = _imagepicker_watermark_make_image($watermark_path))) {
return FALSE;
}
$wm = $wm_info['handle'];
if (!($im_info = _imagepicker_watermark_make_image($image_path))) {
return FALSE;
}
$im = $im_info['handle'];
if (!$im_info['truecolor']) {
// create truecolor image for alpha blending and better resampling
$new_im = imagecreatetruecolor($im_info['width'], $im_info['height']);
imagecopy($new_im, $im, 0, 0, 0, 0, $im_info['width'], $im_info['height']);
imagedestroy($im);
$im = $new_im;
}
imagealphablending($im, TRUE);
$im_x = $im_info['width'];
$im_y = $im_info['height'];
if ($scaling) {
// rescale wm image to desired percentage of dest image WIDTH
if ($use_global_watermark) {
$percentage = imagepicker_variable_get('imagepicker_watermark_scaling_percentage', 50) / 100;
$min_width = intval(imagepicker_variable_get('imagepicker_watermark_min_width', 0));
}
else {
$percentage = imagepicker_variable_get('imagepicker_watermark_scaling_percentage', 50, $account->uid) / 100;
$min_width = intval(imagepicker_variable_get('imagepicker_watermark_min_width', 0, $account->uid));
}
$desired_width = $im_x * $percentage;
if ($desired_width > $wm_info['width']) {
$desired_width = $wm_info['width'];
}
if ($desired_width < $min_width) {
$desired_width = $min_width;
}
$scale_ratio = $desired_width / $wm_info['width'];
// new size
$wm_x = $wm_info['width'] * $scale_ratio;
$wm_y = $wm_info['height'] * $scale_ratio;
}
else {
$wm_x = $wm_info['width'];
$wm_y = $wm_info['height'];
}
switch ($position) {
case 0:
//middle
$dest_x = $im_x / 2 - $wm_x / 2;
$dest_y = $im_y / 2 - $wm_y / 2;
break;
case 1:
//middle right
$dest_x = $im_x - $wm_x;
$dest_y = $im_y / 2 - $wm_y / 2;
break;
case 2:
//middle left
$dest_x = 0;
$dest_y = $im_y / 2 - $wm_y / 2;
break;
case 3:
//top middle
$dest_x = ($im_x - $wm_x) / 2;
$dest_y = 0;
break;
case 4:
//top left
$dest_x = 0;
$dest_y = 0;
break;
case 5:
//top right
$dest_x = $im_x - $wm_x;
$dest_y = 0;
break;
case 6:
//bottom middle
$dest_x = ($im_x - $wm_x) / 2;
$dest_y = $im_y - $wm_y;
break;
case 7:
//bottom right
$dest_x = $im_x - $wm_x;
$dest_y = $im_y - $wm_y;
break;
case 8:
//bottom left
$dest_x = 0;
$dest_y = $im_y - $wm_y;
break;
}
// image create function according to original image type
$img_create_func = 'image' . $im_info['type'];
$perc = empty($perc) ? variable_get('image_jpeg_quality', 75) : $perc;
// scaling on - resampling image
if ($scaling && !imagecopyresampled($im, $wm, $dest_x, $dest_y, 0, 0, $wm_x, $wm_y, $wm_info['width'], $wm_info['height'])) {
drupal_set_message(t('Failed to merge image with watermark.'), 'error');
watchdog('imagepicker', 'Failed to merge image with watermark.', array(), WATCHDOG_ERROR);
}
elseif (!$scaling && !imagecopy($im, $wm, $dest_x, $dest_y, 0, 0, $wm_x, $wm_y)) {
drupal_set_message(t('Failed to merge image with watermark.'), 'error');
watchdog('imagepicker', 'Failed to merge image with watermark.', array(), WATCHDOG_ERROR);
}
elseif ($im_info['type'] == 'jpeg' && !$img_create_func($im, $image_path, $perc)) {
drupal_set_message(t('Failed to save merged image.'), 'error');
watchdog('imagepicker', 'Failed to save merged image.', array(), WATCHDOG_ERROR);
}
elseif ($im_info['type'] != 'jpeg' && !$img_create_func($im, $image_path)) {
drupal_set_message(t('Failed to save merged image.'), 'error');
watchdog('imagepicker', 'Failed to save merged image.', array(), WATCHDOG_ERROR);
}
else {
$status = TRUE;
}
imagedestroy($im);
imagedestroy($wm);
return $status;
}