File: /home/u547966/brikov.ru/www/wp-content/plugins/foogallery/includes/WPThumb/wpthumb.watermark.php
<?php
class WP_Thumb_Watermark {
private $args = array();
private $editor;
public function __construct( $editor, $args ) {
$this->editor = $editor;
$defaults = array(
'padding' => 0,
'position' => 'top,left',
'mask' => ''
);
$this->args = wp_parse_args( $args['watermark_options'], $defaults );
$this->fill_watermark();
}
public function fill_watermark() {
$image = $this->editor->get_image();
$size = $this->editor->get_size();
list( $mask_width, $mask_height, $mask_type, $mask_attr) = getimagesize( $this->args['mask'] );
switch ($mask_type) {
case 1:
$mask = imagecreatefromgif( $this->args['mask'] );
break;
case 2:
$mask = imagecreatefromjpeg( $this->args['mask'] );
break;
case 3:
$mask = imagecreatefrompng( $this->args['mask'] );
break;
}
imagealphablending( $image, true );
if ( strpos( $this->args['position'], 'left' ) !== false )
$left = $this->args['padding'];
else
$left = $size['width'] - $mask_width - $this->args['padding'];
if ( strpos( $this->args['position'], 'top' ) !== false )
$top = $this->args['padding'];
else
$top = $size['height'] - $mask_height - $this->args['padding'];
imagecopy(
$image,
$mask,
$left,
$top,
0,
0,
$mask_width,
$mask_height
);
$this->editor->update_image( $image );
imagedestroy( $mask );
}
}
function wpthumb_watermark_add_args_to_post_image( $args, $id ) {
if ( wpthumb_wm_image_has_watermark( $id ) )
$args['watermark_options'] = wpthumb_wm_get_options( $id );
return $args;
}
add_filter( 'wpthumb_post_image_args', 'wpthumb_watermark_add_args_to_post_image', 10, 2 );
/**
* Hook into WP Thumb before it resizes an image to possible apply a watermatk
*
* @param WP_IMageEditor $editor
* @param array $args
*/
function wpthumb_watermark_pre( $editor, $args ) {
// currently only supports GD
if ( ! is_a( $editor, 'WP_Thumb_Image_Editor_GD') || empty( $args['watermark_options'] ) )
return $editor;
// we only want pre
if ( empty( $args['watermark_options']['pre_resize'] ) )
return;
new WP_Thumb_Watermark( $editor, $args );
return $editor;
}
add_filter( 'wpthumb_image_pre', 'wpthumb_watermark_pre', 10, 2 );
function wpthumb_watermark_post( $editor, $args ) {
// currently only supports GD
if ( ! is_a( $editor, 'WP_Thumb_Image_Editor_GD') || empty( $args['watermark_options'] ) )
return $editor;
// we only want pre
if ( isset( $args['watermark_options']['pre_resize'] ) && $args['watermark_options']['pre_resize'] === true )
return;
new WP_Thumb_Watermark( $editor, $args );
return $editor;
}
add_filter( 'wpthumb_image_post', 'wpthumb_watermark_post', 10, 2 );
/**
* wpthumb_media_form_crop_position function.
*
* Adds a back end for selecting the crop position of images.
*
* @access public
* @param array $fields
* @param array $post
* @return $post
*/
function wpthumb_media_form_watermark_position( $fields, $post ) {
if ( ! wp_attachment_is_image( $post->ID ) )
return $fields;
$current_position = get_post_meta( $post->ID, 'wpthumb_wm_position', true );
if ( ! $current_position )
$current_position = 'top-left';
ob_start();
?>
<style>
#wpthumb_crop_pos { }
.go-left { margin-left: -93px; width: 80px; display: inline-block; margin-right: 10px; text-align: right; color: #999; }
#wpthumb_watermark_pos { margin: 10px 0 }
#wpthumb_watermark_pos input { margin: 3px; width: auto; }
</style>
<div id="wm-options-<?php echo $post->ID ?>">
<p>
<label>
<input class="wm-toggle-watermark" type="checkbox" style="width: 20px" <?php checked( wpthumb_wm_image_has_watermark( $post->ID ) ) ?> name="attachments[<?php echo $post->ID ?>][wpthumb_wm_use_watermark]" /> Apply Watermark
</label>
</p>
<div class="wpthumb_watermark_options <?php echo wpthumb_wm_image_has_watermark( $post->ID ) ? '' : 'hidden' ?>">
<div>
<label class="go-left">Mask</label>
<select name="attachments[<?php echo $post->ID ?>][wm_watermark_mask]">
<?php foreach( wpthumb_wm_get_watermark_masks() as $mask_id => $watermark_mask ) : ?>
<option value="<?php echo $mask_id ?>" <?php selected( wpthumb_wm_mask( $post->ID ) == $mask_id ) ?>><?php echo $watermark_mask['label'] ?></option>
<?php endforeach; ?>
</select>
</div>
<div id="wpthumb_watermark_pos">
<label class="go-left">Position</label>
<input type="radio" name="attachments[<?php echo $post->ID ?>][wpthumb_wm_watermark_position]" value="top-left" title="Left, Top" <?php checked( 'top-left', $current_position ) ?>/>
<input type="radio" name="attachments[<?php echo $post->ID ?>][wpthumb_wm_watermark_position]" value="top-right" title="Center, Top" <?php checked( 'top-right', $current_position ) ?> /><br />
<input type="radio" name="attachments[<?php echo $post->ID ?>][wpthumb_wm_watermark_position]" value="bottom-left" title="Right, Top" <?php checked( 'bottom-left', $current_position ) ?> />
<input type="radio" name="attachments[<?php echo $post->ID ?>][wpthumb_wm_watermark_position]" value="bottom-right" title="Left, Center" <?php checked( 'bottom-right', $current_position ) ?> />
</div>
<div id="">
<label class="go-left">Padding</label>
<input type="number" value="<?php echo wpthumb_wm_padding( $post->ID ) ?>" name="attachments[<?php echo $post->ID ?>][wpthumb_wm_watermark_padding]" style="width: 40px" />
</div>
</div>
</div>
<script>
jQuery( '#wm-options-<?php echo $post->ID ?>' ).live( 'change', '.wm-toggle-watermark', function(e) {
jQuery( e.target ).closest( 'p' ).next().toggle();
});
</script>
<?php
$html = ob_get_clean();
$fields['watermark-position'] = array(
'label' => __( 'Watermark', 'wpthumb' ),
'input' => 'html',
'html' => $html
);
return $fields;
}
/**
* Only add the watermkaring admin optins if the current theme suports it, as we don;t want to clutter
* for poeple who don't care
*
*/
function wpthumb_add_watermarking_admin_hooks() {
if ( current_theme_supports( 'wpthumb-watermarking' ) ) {
add_filter( 'attachment_fields_to_edit', 'wpthumb_media_form_watermark_position', 10, 2 );
add_filter( 'attachment_fields_to_save', 'wpthumb_media_form_watermark_save', 10, 2);
}
}
add_action( 'init', 'wpthumb_add_watermarking_admin_hooks' );
/**
* wpthumb_media_form_watermark_save function.
*
* Saves watermark in post meta.
*
* @access public
* @param array $post
* @param array $attachment
* @return $post
*/
function wpthumb_media_form_watermark_save( $post, $attachment ){
if ( ! empty( $attachment['wpthumb_wm_use_watermark'] ) ) {
update_post_meta( $post['ID'], 'use_watermark', true );
update_post_meta( $post['ID'], 'wpthumb_wm_position', $attachment['wpthumb_wm_watermark_position'] );
update_post_meta( $post['ID'], 'wpthumb_wm_padding', (int) $attachment['wpthumb_wm_watermark_padding'] );
update_post_meta( $post['ID'], 'wpthumb_wm_pre_resize', '0' );
update_post_meta( $post['ID'], 'wpthumb_wm_mask', $attachment['wm_watermark_mask'] );
} else {
delete_post_meta( $post['ID'], 'use_watermark' );
delete_post_meta( $post['ID'], 'wpthumb_wm_position' );
delete_post_meta( $post['ID'], 'wpthumb_wm_padding' );
delete_post_meta( $post['ID'], 'wpthumb_wm_pre_resize' );
delete_post_meta( $post['ID'], 'wpthumb_wm_mask' );
}
return $post;
}
/**
* wpthumb_wm_get_options function.
*
* @access public
* @param mixed $id
* @return array
*/
function wpthumb_wm_get_options( $id ) {
if ( ! wpthumb_wm_image_has_watermark( $id ) )
return array();
$options['mask'] = get_template_directory() . '/images/watermark.png';
$mask = wpthumb_wm_mask( $id );
if( ! empty( $mask ) ) {
$options['mask'] = wpthumb_wm_get_watermark_mask_file( $mask );
} else {
$mask = wpthumb_wm_get_default_watermark_mask();
$options['mask'] = $mask['file'];
}
$options['padding'] = wpthumb_wm_padding($id);
$position = wpthumb_wm_position( $id );
$options['position'] = $position;
return $options;
}
/**
* wpthumb_wm_image_has_watermark function.
*
* @access public
* @param mixed $image_id
* @return null
*/
function wpthumb_wm_image_has_watermark( $image_id ) {
return (bool) get_post_meta( $image_id, 'use_watermark', true );
}
/**
* wpthumb_wm_position function.
*
* @access public
* @param mixed $image_id
* @return null
*/
function wpthumb_wm_position( $image_id ) {
if ( $pos = get_post_meta( $image_id, 'wpthumb_wm_position', true ) )
return $pos;
//legacy
if ( $pos = get_post_meta( $image_id, 'wm_position', true ) )
return $pos;
}
/**
* wpthumb_wm_padding function.
*
* @access public
* @param mixed $image_id
* @return null
*/
function wpthumb_wm_padding( $image_id ) {
if ( $padding = (int) get_post_meta( $image_id, 'wpthumb_wm_padding', true ) )
return $padding;
//legacy
if ( $padding = (int) get_post_meta( $image_id, 'wm_padding', true ) )
return $padding;
}
function wpthumb_wm_pre_resize( $image_id ) {
if ( $pre = (bool) get_post_meta( $image_id, 'wpthumb_wm_pre_resize', true ) )
return $pre;
//legacy
if ( $pre = (bool) get_post_meta( $image_id, 'wm_pre_resize', true ) )
return $pre;
}
function wpthumb_wm_mask( $image_id ) {
if ( $pre = (string) get_post_meta( $image_id, 'wpthumb_wm_mask', true ) )
return $pre;
//legacy
if ( $pre = (string) get_post_meta( $image_id, 'wm_mask', true ) )
return $pre;
}
/**
* Returns all the watermarks that are registered
*
* @return array
*/
function wpthumb_wm_get_watermark_masks() {
global $_wm_registered_watermarks;
$_wm_registered_watermarks = (array) $_wm_registered_watermarks;
$masks = array( 'default' => array( 'file' => get_stylesheet_directory() . '/images/watermark.png', 'label' => 'Default' ) );
$masks = array_merge( $masks, $_wm_registered_watermarks );
return $masks;
}
/**
* Returns the watermarking image file for a given watermark name
*
* @param string $mask
* @return string
*/
function wpthumb_wm_get_watermark_mask_file( $mask ) {
$masks = wpthumb_wm_get_watermark_masks();
return $masks[$mask]['file'];
}
/**
* Registers extra watermark images for the user to select in the admin
*
* @param string $name - sanitized identifier
* @param string $file - full path to the watermarking image
* @param string $label - test to be used for the watermarks name
*/
function wpthumb_wm_register_watermark( $name, $file, $label ) {
global $_wm_registered_watermarks;
$_wm_registered_watermarks = (array) $_wm_registered_watermarks;
$_wm_registered_watermarks[$name] = array( 'file' => $file, 'label' => $label );
}
/**
* Returns the default watermask array ( file => string, label => string )
*
* @return array
*/
function wpthumb_wm_get_default_watermark_mask() {
$masks = wpthumb_wm_get_watermark_masks();
return $masks['default'];
}