PATH:
home
/
lab2454c
/
nfsin.com
/
wp-content
/
plugins
/
zfejiyb
/
includes
<?php /** * Handles image watermarking functionality * * @package Protect_Uploads * @subpackage Protect_Uploads/includes */ /** * The image watermarking functionality of the plugin. * * @package Protect_Uploads * @subpackage Protect_Uploads/includes * @author Your Name <email@example.com> */ class Alti_ProtectUploads_Image { /** * The plugin settings * * @since 0.5.2 * @access private * @var array $settings The plugin settings. */ private $settings; /** * Initialize the class and set its properties. * * @since 0.5.2 */ public function __construct() { $this->settings = get_option( 'protect_uploads_settings', array() ); } /** * Initialize hooks * * @since 0.5.2 */ public function init() { if ( ! empty( $this->settings['enable_watermark'] ) ) { add_filter( 'wp_handle_upload', array( $this, 'handle_image_upload' ) ); } } /** * Handle image upload to add watermark * * @since 0.5.2 * @param array $upload Upload file information. * @return array */ public function handle_image_upload( $upload ) { // Only process if it's an image and watermarking is enabled if ( ! $this->is_image_file( $upload['file'] ) || empty( $this->settings['enable_watermark'] ) ) { return $upload; } // Try to add watermark $watermarked = $this->add_watermark( $upload['file'] ); // If watermarking failed, log error but don't block upload if ( ! $watermarked ) { // error_log( 'Protect Uploads: Failed to add watermark to ' . $upload['file'] ); // Removed error log } // Always return the original upload array to allow the upload to complete return $upload; } /** * Check if file is an image * * @since 0.5.2 * @param string $file File path. * @return boolean */ private function is_image_file( $file ) { $image_types = array( 'image/jpeg', 'image/png', 'image/gif' ); $file_type = wp_check_filetype( $file ); return in_array( $file_type['type'], $image_types, true ); } /** * Add watermark to image * * @since 0.5.2 * @param string $image_path Path to image file. * @return boolean */ public function add_watermark( $image_path ) { if ( ! function_exists( 'imagecreatetruecolor' ) ) { // error_log( 'Protect Uploads: GD library not available' ); // Removed error log return false; } $image_info = getimagesize( $image_path ); if ( false === $image_info ) { // error_log( 'Protect Uploads: Could not get image size for ' . $image_path ); // Removed error log return false; } // Create image resource based on file type. switch ( $image_info[2] ) { case IMAGETYPE_JPEG: $image = imagecreatefromjpeg( $image_path ); break; case IMAGETYPE_PNG: $image = imagecreatefrompng( $image_path ); if ( $image ) { imagealphablending( $image, true ); imagesavealpha( $image, true ); } break; case IMAGETYPE_GIF: $image = imagecreatefromgif( $image_path ); break; default: // error_log( 'Protect Uploads: Unsupported image type for ' . $image_path ); // Removed error log return false; } if ( ! $image ) { // error_log( 'Protect Uploads: Failed to create image resource for ' . $image_path ); // Removed error log return false; } // Set up watermark text. $watermark_text = ! empty( $this->settings['watermark_text'] ) ? $this->settings['watermark_text'] : get_bloginfo( 'name' ); // Calculate font size based on setting $font_size_percentage = 5; // Default to medium (5%) if ( ! empty( $this->settings['watermark_font_size'] ) ) { switch ( $this->settings['watermark_font_size'] ) { case 'small': $font_size_percentage = 3; break; case 'large': $font_size_percentage = 7; break; case 'medium': default: $font_size_percentage = 5; break; } } $font_size = (int) min( $image_info[0], $image_info[1] ) * ($font_size_percentage / 100); // Try to load custom font, fallback to system font if not available $font_path = plugin_dir_path( dirname( __FILE__ ) ) . 'assets/fonts/OpenSans-Regular.ttf'; $use_ttf = file_exists( $font_path ); if ( $use_ttf ) { // Verify font is readable if ( ! is_readable( $font_path ) ) { // error_log( 'Protect Uploads: Font file not readable: ' . $font_path ); // Removed error log $use_ttf = false; } } // Calculate text size and position if ( $use_ttf ) { $bbox = @imagettfbbox( $font_size, 0, $font_path, $watermark_text ); if ( $bbox ) { $text_width = $bbox[2] - $bbox[0]; $text_height = $bbox[1] - $bbox[7]; } else { // error_log( 'Protect Uploads: Failed to calculate TTF text size, falling back to system font' ); // Removed error log $text_width = imagefontwidth( 5 ) * strlen( $watermark_text ); $text_height = imagefontheight( 5 ); $use_ttf = false; } } else { $text_width = imagefontwidth( 5 ) * strlen( $watermark_text ); $text_height = imagefontheight( 5 ); } // Calculate position. $padding = 20; switch ( $this->settings['watermark_position'] ) { case 'top-left': $x = $padding; $y = $text_height + $padding; break; case 'top-right': $x = $image_info[0] - $text_width - $padding; $y = $text_height + $padding; break; case 'bottom-left': $x = $padding; $y = $image_info[1] - $padding; break; case 'center': $x = (int) (( $image_info[0] - $text_width ) / 2); $y = (int) (( $image_info[1] + $text_height ) / 2); break; case 'bottom-right': default: $x = $image_info[0] - $text_width - $padding; $y = $image_info[1] - $padding; break; } // Create watermark. $opacity = isset( $this->settings['watermark_opacity'] ) ? $this->settings['watermark_opacity'] : 50; $opacity = min( 100, max( 0, $opacity ) ); // Ensure opacity is between 0 and 100. $alpha = (int) (127 - ( $opacity * 1.27 )); // Convert percentage to alpha value (127 = transparent, 0 = opaque). $text_color = imagecolorallocatealpha( $image, 255, 255, 255, $alpha ); $shadow_color = imagecolorallocatealpha( $image, 0, 0, 0, $alpha ); // Add text with shadow effect. if ( $use_ttf ) { @imagettftext( $image, $font_size, 0, $x + 2, $y + 2, $shadow_color, $font_path, $watermark_text ); @imagettftext( $image, $font_size, 0, $x, $y, $text_color, $font_path, $watermark_text ); } else { // Fallback to basic text if TTF is not available imagestring( $image, 5, $x + 2, $y + 2, $watermark_text, $shadow_color ); imagestring( $image, 5, $x, $y, $watermark_text, $text_color ); } // Save image with proper quality settings $result = false; switch ( $image_info[2] ) { case IMAGETYPE_JPEG: $result = imagejpeg( $image, $image_path, 90 ); break; case IMAGETYPE_PNG: imagealphablending( $image, false ); imagesavealpha( $image, true ); $result = imagepng( $image, $image_path, 9 ); break; case IMAGETYPE_GIF: $result = imagegif( $image, $image_path ); break; } imagedestroy( $image ); if ( ! $result ) { // error_log( 'Protect Uploads: Failed to save watermarked image: ' . $image_path ); // Removed error log } return $result; } }
[-] class-protect-uploads-activator.php
[edit]
[-] class-protect-uploads-frontend.php
[edit]
[-] class-protect-uploads-passwords.php
[edit]
[-] index.php
[edit]
[+]
..
[-] class-protect-uploads.php
[edit]
[-] class-protect-uploads-i18n.php
[edit]
[-] class-protect-uploads-image.php
[edit]
[-] class-protect-uploads-loader.php
[edit]
[-] .htaccess
[edit]
[-] class-protect-uploads-deactivator.php
[edit]