Пример #1
0
 public function process_image($input_parameters)
 {
     $resultData = array();
     $resultData['image_original_file_path'] = false;
     $resultData['image_optimized_file_path'] = false;
     $resultData['image_optimized_file_url'] = false;
     if (false === $this->_isSystemReadyToHandleImagesStatus) {
         return $resultData;
     }
     if (!isset(PepVN_Data::$params['optimize_images']['number_images_processed_request'])) {
         PepVN_Data::$params['optimize_images']['number_images_processed_request'] = 0;
     }
     $options = false;
     $paramsWatermarkOptions = false;
     if (isset($input_parameters['options']) && $input_parameters['options']) {
         $options = $input_parameters['options'];
     }
     if (isset($input_parameters['paramsWatermarkOptions']) && $input_parameters['paramsWatermarkOptions']) {
         $paramsWatermarkOptions = $input_parameters['paramsWatermarkOptions'];
     }
     unset($input_parameters['options']);
     unset($input_parameters['paramsWatermarkOptions']);
     if (!$options) {
         $options = self::getOption();
     }
     if (isset($options['optimize_images_optimize_image_file_enable']) && 'on' === $options['optimize_images_optimize_image_file_enable']) {
     } else {
         return $resultData;
     }
     if (!$paramsWatermarkOptions) {
         $rsSettingWatermarksFirstOptions = $this->parse_watermarks_first_options(array('options' => $options));
         $paramsWatermarkOptions = $rsSettingWatermarksFirstOptions['paramsWatermarkOptions'];
         $options = $rsSettingWatermarksFirstOptions['options'];
         unset($rsSettingWatermarksFirstOptions);
     }
     if (isset($input_parameters['plusOptions']) && is_array($input_parameters['plusOptions'])) {
         $options = Utils::mergeArrays(array($options, $input_parameters['plusOptions']));
     }
     if (isset($paramsWatermarkOptions['text']) && is_array($paramsWatermarkOptions['text']) && !empty($paramsWatermarkOptions['text'])) {
     } else {
         $paramsWatermarkOptions['text'] = false;
     }
     if (isset($paramsWatermarkOptions['image']) && is_array($paramsWatermarkOptions['image']) && !empty($paramsWatermarkOptions['image'])) {
     } else {
         $paramsWatermarkOptions['image'] = false;
     }
     if (isset($options['optimize_images_watermarks_enable']) && 'on' === $options['optimize_images_watermarks_enable']) {
     } else {
         $paramsWatermarkOptions['text'] = false;
         $paramsWatermarkOptions['image'] = false;
     }
     $isProcessStatus = false;
     if ($paramsWatermarkOptions['text'] || $paramsWatermarkOptions['image']) {
         $isProcessStatus = true;
     }
     $options['optimize_images_image_quality_value'] = abs((int) $options['optimize_images_image_quality_value']);
     if ($options['optimize_images_image_quality_value'] >= 10 && $options['optimize_images_image_quality_value'] < 100) {
         $isProcessStatus = true;
     }
     $options['optimize_images_rename_img_filename_value'] = trim($options['optimize_images_rename_img_filename_value']);
     if ($options['optimize_images_rename_img_filename_value']) {
         $isProcessStatus = true;
     }
     $optimize_images_file_exclude_external_url_pattern = false;
     if (isset($options['optimize_images_file_exclude_external_url']) && $options['optimize_images_file_exclude_external_url']) {
         $options['optimize_images_file_exclude_external_url'] = trim($options['optimize_images_file_exclude_external_url']);
         if ($options['optimize_images_file_exclude_external_url']) {
             $tmp = PepVN_Data::cleanPregPatternsArray($options['optimize_images_file_exclude_external_url']);
             if ($tmp && !empty($tmp)) {
                 $optimize_images_file_exclude_external_url_pattern = '#(' . implode('|', $tmp) . ')#i';
             }
             unset($tmp);
         }
     }
     if ($isProcessStatus) {
         if (isset($input_parameters['original_image_src']) && $input_parameters['original_image_src']) {
             if (Utils::isImageUrl($input_parameters['original_image_src'])) {
                 if (isset($options['optimize_images_file_exclude_external_url_enable']) && 'on' === $options['optimize_images_file_exclude_external_url_enable']) {
                     if (!Utils::isUrlSameDomain($input_parameters['original_image_src'], PepVN_Data::$defaultParams['domainName'], false)) {
                         $isProcessStatus = false;
                     }
                 }
                 if ($isProcessStatus) {
                     if ($optimize_images_file_exclude_external_url_pattern) {
                         if (preg_match($optimize_images_file_exclude_external_url_pattern, $input_parameters['original_image_src'])) {
                             $isProcessStatus = false;
                         }
                     }
                 }
             } else {
                 $isProcessStatus = false;
             }
         } else {
             $isProcessStatus = false;
         }
     }
     if ($isProcessStatus) {
         $options['optimize_images_maximum_files_handled_each_request'] = (int) $options['optimize_images_maximum_files_handled_each_request'];
         if ($options['optimize_images_maximum_files_handled_each_request'] > 0) {
             if (PepVN_Data::$params['optimize_images']['number_images_processed_request'] >= $options['optimize_images_maximum_files_handled_each_request']) {
                 $isProcessStatus = false;
             }
         }
     }
     if ($isProcessStatus) {
         if (!isset($input_parameters['optimized_image_file_name'])) {
             $input_parameters['optimized_image_file_name'] = '';
         }
         if (!$input_parameters['optimized_image_file_name']) {
             $imgPathInfo = pathinfo($input_parameters['original_image_src']);
             if (isset($imgPathInfo['filename']) && $imgPathInfo['filename']) {
                 $input_parameters['optimized_image_file_name'] = trim($imgPathInfo['filename']);
             }
         }
         if (!$input_parameters['optimized_image_file_name']) {
             $isProcessStatus = false;
         }
     }
     if (!$isProcessStatus) {
         return $resultData;
     }
     $options['optimize_images_file_maximum_width_height'] = (int) $options['optimize_images_file_maximum_width_height'];
     $options['optimize_images_file_minimum_width_height'] = (int) $options['optimize_images_file_minimum_width_height'];
     if (!isset($input_parameters['resize_max_width'])) {
         $input_parameters['resize_max_width'] = 0;
     }
     $input_parameters['resize_max_width'] = (int) $input_parameters['resize_max_width'];
     $input_parameters['resize_max_width'] = abs($input_parameters['resize_max_width']);
     if (!isset($input_parameters['resize_max_height'])) {
         $input_parameters['resize_max_height'] = 0;
     }
     $input_parameters['resize_max_height'] = (int) $input_parameters['resize_max_height'];
     $input_parameters['resize_max_height'] = abs($input_parameters['resize_max_height']);
     if (!isset($input_parameters['optimized_image_folder_path'])) {
         $input_parameters['optimized_image_folder_path'] = '';
     }
     if (!$input_parameters['optimized_image_folder_path']) {
         /*
          * Dont't edit here, it make key for each image's url
          */
         $input_parameters['optimized_image_folder_path'] = $this->_folderStorePath;
         $imgKey1 = array();
         $imgKey1[] = PepVN_Data::$defaultParams['fullDomainName'];
         //add domain in case use watermark for each domain
         $imgKey1[] = $input_parameters['original_image_src'];
         $imgKey1 = $this->_createKey($imgKey1);
         $imgKey1 = $this->_hashCreateKey($imgKey1, 8);
         $input_parameters['optimized_image_folder_path'] .= substr($imgKey1, 0, 2) . DIRECTORY_SEPARATOR . $imgKey1 . DIRECTORY_SEPARATOR;
         /*
          * Dont't edit here, it make key for each image's url
          */
     }
     $keyConfigsProcessedData = '';
     if (isset($options['optimize_images_handle_again_files_different_configuration_enable']) && 'on' === $options['optimize_images_handle_again_files_different_configuration_enable']) {
         /*
          * Dont't edit here, it make key for each image's url
          */
         $fieldsKeysProcessedData = array('optimize_images_watermarks_enable', 'optimize_images_watermarks_watermark_position', 'optimize_images_watermarks_watermark_type', 'optimize_images_watermarks_watermark_text_value', 'optimize_images_watermarks_watermark_text_font_name', 'optimize_images_watermarks_watermark_text_size', 'optimize_images_watermarks_watermark_text_color', 'optimize_images_watermarks_watermark_text_margin_x', 'optimize_images_watermarks_watermark_text_margin_y', 'optimize_images_watermarks_watermark_text_opacity_value', 'optimize_images_watermarks_watermark_text_background_enable', 'optimize_images_watermarks_watermark_text_background_color', 'optimize_images_watermarks_watermark_image_url', 'optimize_images_watermarks_watermark_image_width', 'optimize_images_watermarks_watermark_image_margin_x', 'optimize_images_watermarks_watermark_image_margin_y', 'optimize_images_image_quality_value', 'optimize_images_rename_img_filename_value');
         $keyConfigsProcessedData = array();
         foreach ($fieldsKeysProcessedData as $value1) {
             if ($value1) {
                 if (isset($options[$value1])) {
                     $keyConfigsProcessedData[$value1] = $options[$value1];
                 }
             }
         }
         $keyConfigsProcessedData = $this->_createKey($keyConfigsProcessedData);
         /*
          * Dont't edit here, it make key for each image's url
          */
     }
     $keyConfigsProcessedData = trim($keyConfigsProcessedData);
     /*
      * Dont't edit here, it make key for each image's url
      */
     $keyFileConfigsProcessedData = $keyConfigsProcessedData;
     $keyFileConfigsProcessedData = md5($keyFileConfigsProcessedData);
     $keyFileConfigsProcessedData = $this->_hashCreateKey($keyFileConfigsProcessedData, 2);
     /*
      * Dont't edit here, it make key for each image's url
      */
     $input_parameters['optimized_image_file_name'] = $this->_fixFileName($input_parameters['optimized_image_file_name']);
     $imgOptimizedFilePathExists1 = false;
     $imgOptimizedFilePath1 = $input_parameters['optimized_image_folder_path'] . $input_parameters['optimized_image_file_name'] . '-' . $keyFileConfigsProcessedData;
     if ($input_parameters['resize_max_width'] > 0 || $input_parameters['resize_max_height'] > 0) {
         $imgOptimizedFilePath1 .= '-' . $input_parameters['resize_max_width'] . 'x' . $input_parameters['resize_max_height'];
     }
     foreach ($this->imageExtensionsAllow as $key1 => $value1) {
         if ($value1) {
             $tmp = $imgOptimizedFilePath1 . '.' . $value1;
             if (is_file($tmp)) {
                 if (filesize($tmp) > 0) {
                     $imgOptimizedFilePathExists1 = $tmp;
                     break;
                 }
             }
         }
     }
     if ($imgOptimizedFilePathExists1) {
         $rsGetimagesize = getimagesize($imgOptimizedFilePathExists1);
         if ($rsGetimagesize && isset($rsGetimagesize[0]) && $rsGetimagesize[0]) {
             $resultData['image_optimized_file_path'] = $imgOptimizedFilePathExists1;
             $resultData['image_optimized_file_url'] = str_replace($this->_folderStorePath, $this->_folderStoreUrl, $resultData['image_optimized_file_path']);
             $resultData['image_optimized_width'] = (int) $rsGetimagesize[0];
             $resultData['image_optimized_height'] = (int) $rsGetimagesize[1];
             return $resultData;
         }
     }
     $checkStatus1 = false;
     if (isset($input_parameters['action']) && $input_parameters['action']) {
         if ('do_process_image' === $input_parameters['action']) {
             $checkStatus1 = true;
         }
         // else only check if file images processed exist
     }
     if (!$checkStatus1) {
         return $resultData;
     }
     $remote = $this->di->getShared('remote');
     if (isset($input_parameters['original_image_src']) && $input_parameters['original_image_src']) {
         if (Utils::isUrl($input_parameters['original_image_src'])) {
             $imgOptimizedFilePath = false;
             if ($input_parameters['optimized_image_folder_path'] && is_dir($input_parameters['optimized_image_folder_path'])) {
             } else {
                 System::mkdir($input_parameters['optimized_image_folder_path']);
             }
             if (is_dir($input_parameters['optimized_image_folder_path']) && is_readable($input_parameters['optimized_image_folder_path']) && is_writable($input_parameters['optimized_image_folder_path'])) {
                 if (!$resultData['image_optimized_file_path']) {
                     $imgFolderCachePath = $this->_folderCachePath;
                     if ($imgFolderCachePath && is_dir($imgFolderCachePath) && is_readable($imgFolderCachePath) && is_writable($imgFolderCachePath)) {
                         $imgOriginalCacheFilePath = $imgFolderCachePath . DIRECTORY_SEPARATOR;
                         $imgOriginalCacheFilePath .= md5($input_parameters['original_image_src']) . '.txt';
                         if (!is_file($imgOriginalCacheFilePath)) {
                             file_put_contents($imgOriginalCacheFilePath, '');
                             $imgSrcContent = $remote->get($input_parameters['original_image_src'], array('cache_timeout' => WP_PEPVN_CACHE_TIMEOUT_NORMAL));
                             if ($imgSrcContent) {
                                 file_put_contents($imgOriginalCacheFilePath, $imgSrcContent);
                             }
                         }
                         if (is_file($imgOriginalCacheFilePath)) {
                             $valueTemp1 = filesize($imgOriginalCacheFilePath);
                             if ($valueTemp1 && $valueTemp1 > 0) {
                                 if ($this->_isImageFileCanProcess($imgOriginalCacheFilePath)) {
                                     $imgOriginalCacheFile_RsGetImageFileInfo = $this->_getImageFileInfo($imgOriginalCacheFilePath);
                                     if (isset($imgOriginalCacheFile_RsGetImageFileInfo['image_type']) && $imgOriginalCacheFile_RsGetImageFileInfo['image_type']) {
                                         PepVN_Data::$params['optimize_images']['number_images_processed_request']++;
                                         $imgOptimizedFilePath1 .= '.' . $imgOriginalCacheFile_RsGetImageFileInfo['image_type'];
                                         if (!is_file($imgOptimizedFilePath1)) {
                                             file_put_contents($imgOptimizedFilePath1, '');
                                         }
                                         $isCanProcessFileStatus1 = true;
                                         if ($options['optimize_images_file_minimum_width_height'] > 0 || $options['optimize_images_file_maximum_width_height'] > 0) {
                                             $isCanProcessFileStatus1 = false;
                                             if (isset($imgOriginalCacheFile_RsGetImageFileInfo['width']) && $imgOriginalCacheFile_RsGetImageFileInfo['width'] > 0 && isset($imgOriginalCacheFile_RsGetImageFileInfo['height']) && $imgOriginalCacheFile_RsGetImageFileInfo['height'] > 0) {
                                                 $isCanProcessFileStatus1 = true;
                                                 if ($isCanProcessFileStatus1) {
                                                     if ($options['optimize_images_file_minimum_width_height'] > 0) {
                                                         if ($imgOriginalCacheFile_RsGetImageFileInfo['width'] >= $options['optimize_images_file_minimum_width_height'] && $imgOriginalCacheFile_RsGetImageFileInfo['height'] >= $options['optimize_images_file_minimum_width_height']) {
                                                         } else {
                                                             $isCanProcessFileStatus1 = false;
                                                         }
                                                     }
                                                 }
                                                 if ($isCanProcessFileStatus1) {
                                                     if ($options['optimize_images_file_maximum_width_height'] > 0) {
                                                         if ($imgOriginalCacheFile_RsGetImageFileInfo['width'] <= $options['optimize_images_file_maximum_width_height'] && $imgOriginalCacheFile_RsGetImageFileInfo['height'] <= $options['optimize_images_file_maximum_width_height']) {
                                                         } else {
                                                             $isCanProcessFileStatus1 = false;
                                                         }
                                                     }
                                                 }
                                             }
                                         }
                                         if (!$isCanProcessFileStatus1) {
                                             return $resultData;
                                         }
                                         $resultData['image_original_file_path'] = $imgOriginalCacheFilePath;
                                         $pepVN_PHPImage = new PepVN_PHPImage($imgOriginalCacheFilePath);
                                         if ($options['optimize_images_image_quality_value'] > 95) {
                                             $options['optimize_images_image_quality_value'] = 95;
                                         }
                                         $pepVN_PHPImage->setQuality($options['optimize_images_image_quality_value']);
                                         $imgOriginalCacheFile_RatioWidthPerHeight = $imgOriginalCacheFile_RsGetImageFileInfo['width'] / $imgOriginalCacheFile_RsGetImageFileInfo['height'];
                                         $imgOriginalCacheFile_RatioWidthPerHeight = (double) $imgOriginalCacheFile_RatioWidthPerHeight;
                                         $resizeImgNewWidth = 0;
                                         $resizeImgNewHeight = 0;
                                         $isCanWatermarkStatus1 = true;
                                         if ($input_parameters['resize_max_width'] > 0 || $input_parameters['resize_max_height'] > 0) {
                                             if ($isCanWatermarkStatus1) {
                                                 if ($options['optimize_images_file_minimum_width_height'] > 0) {
                                                     if ($input_parameters['resize_max_width'] > 0) {
                                                         if ($input_parameters['resize_max_width'] < $options['optimize_images_file_minimum_width_height']) {
                                                             $isCanWatermarkStatus1 = false;
                                                         }
                                                     }
                                                     if ($input_parameters['resize_max_height'] > 0) {
                                                         if ($input_parameters['resize_max_height'] < $options['optimize_images_file_minimum_width_height']) {
                                                             $isCanWatermarkStatus1 = false;
                                                         }
                                                     }
                                                 }
                                             }
                                             if ($isCanWatermarkStatus1) {
                                                 if ($options['optimize_images_file_maximum_width_height'] > 0) {
                                                     if ($input_parameters['resize_max_width'] > 0) {
                                                         if ($input_parameters['resize_max_width'] > $options['optimize_images_file_maximum_width_height']) {
                                                             $isCanWatermarkStatus1 = false;
                                                         }
                                                     }
                                                     if ($input_parameters['resize_max_height'] > 0) {
                                                         if ($input_parameters['resize_max_height'] > $options['optimize_images_file_maximum_width_height']) {
                                                             $isCanWatermarkStatus1 = false;
                                                         }
                                                     }
                                                 }
                                             }
                                             $resizeImgNewWidth = $input_parameters['resize_max_width'];
                                             $resizeImgNewHeight = $input_parameters['resize_max_height'];
                                             if ($resizeImgNewWidth > $imgOriginalCacheFile_RsGetImageFileInfo['width']) {
                                                 $resizeImgNewWidth = $imgOriginalCacheFile_RsGetImageFileInfo['width'];
                                             }
                                             if ($resizeImgNewHeight > $imgOriginalCacheFile_RsGetImageFileInfo['height']) {
                                                 $resizeImgNewHeight = $imgOriginalCacheFile_RsGetImageFileInfo['height'];
                                             }
                                             if ($resizeImgNewWidth > 0) {
                                                 if (0 === $resizeImgNewHeight) {
                                                     $resizeImgNewHeight = ceil($resizeImgNewWidth / $imgOriginalCacheFile_RatioWidthPerHeight);
                                                 }
                                             }
                                             if ($resizeImgNewHeight > 0) {
                                                 if (0 === $resizeImgNewWidth) {
                                                     $resizeImgNewWidth = ceil($resizeImgNewHeight * $imgOriginalCacheFile_RatioWidthPerHeight);
                                                 }
                                             }
                                             if ($resizeImgNewWidth > 0 && $resizeImgNewHeight > 0) {
                                                 $pepVN_PHPImage->resize($resizeImgNewWidth, $resizeImgNewHeight, false, false);
                                             }
                                         }
                                         if ($resizeImgNewWidth > 0 && $resizeImgNewHeight > 0) {
                                             $targetImgNeedWatermark_Width = $resizeImgNewWidth;
                                             $targetImgNeedWatermark_Height = $resizeImgNewHeight;
                                         } else {
                                             $targetImgNeedWatermark_Width = $imgOriginalCacheFile_RsGetImageFileInfo[0];
                                             $targetImgNeedWatermark_Height = $imgOriginalCacheFile_RsGetImageFileInfo[1];
                                         }
                                         if ($paramsWatermarkOptions['text'] && $isCanWatermarkStatus1) {
                                             $watermarkTextBoxWidth = 0;
                                             $watermarkTextBoxHeight = 0;
                                             $textFontSize = 12;
                                             $boxPaddingX = 0;
                                             $boxPaddingY = 0;
                                             if ($paramsWatermarkOptions['text']) {
                                                 if (isset($paramsWatermarkOptions['text']['fontSize']) && $paramsWatermarkOptions['text']['fontSize']) {
                                                     $paramsWatermarkOptions['text']['fontSize'] = (int) $paramsWatermarkOptions['text']['fontSize'];
                                                     if ($paramsWatermarkOptions['text']['fontSize'] > 0) {
                                                         $textFontSize = $paramsWatermarkOptions['text']['fontSize'];
                                                     }
                                                 }
                                                 if (isset($options['optimize_images_watermarks_watermark_text_size']) && $options['optimize_images_watermarks_watermark_text_size']) {
                                                     if (false !== stripos($options['optimize_images_watermarks_watermark_text_size'], '%')) {
                                                         $valueTemp = $options['optimize_images_watermarks_watermark_text_size'];
                                                         $valueTemp = preg_replace('#[^0-9]+#i', '', $valueTemp);
                                                         $valueTemp = (int) $valueTemp;
                                                         $valueTemp = abs($valueTemp);
                                                         if ($valueTemp > 100) {
                                                             $valueTemp = 100;
                                                         }
                                                         $watermarkTextBoxWidth = $targetImgNeedWatermark_Width * ($valueTemp / 100);
                                                         $watermarkTextBoxWidth = floor($watermarkTextBoxWidth);
                                                         $watermarkTextBoxWidth = (int) $watermarkTextBoxWidth;
                                                         $watermarkTextBoxHeight = $imgOriginalCacheFile_RsGetImageFileInfo[1] * ($valueTemp / 100);
                                                         $watermarkTextBoxHeight = floor($watermarkTextBoxHeight);
                                                         $watermarkTextBoxHeight = (int) $watermarkTextBoxHeight;
                                                         $textFontSize = PepVN_Images::fitTextSizeToBoxSize(0, 0, $paramsWatermarkOptions['text']['fontFile'], $options['optimize_images_watermarks_watermark_text_value'], $watermarkTextBoxWidth, $watermarkTextBoxHeight);
                                                     }
                                                 }
                                             }
                                             $textFontSize = (int) $textFontSize;
                                             if ($textFontSize > 0) {
                                                 $paramsWatermarkOptions['text']['fontSize'] = $textFontSize;
                                                 $rsCalculateText = PepVN_Images::calculateText($textFontSize, 0, $paramsWatermarkOptions['text']['fontFile'], $options['optimize_images_watermarks_watermark_text_value']);
                                                 $watermarkTextBoxWidth = $rsCalculateText['actualWidth'];
                                                 $watermarkTextBoxHeight = $rsCalculateText['actualHeight'];
                                             }
                                             $watermarkTextBoxWidth = (int) $watermarkTextBoxWidth;
                                             $watermarkTextBoxHeight = (int) $watermarkTextBoxHeight;
                                             if ($watermarkTextBoxWidth > 0 && $watermarkTextBoxHeight > 0) {
                                                 if (isset($paramsWatermarkOptions['text']['boxColor']) && $paramsWatermarkOptions['text']['boxColor']) {
                                                     $boxPaddingX = $paramsWatermarkOptions['text']['boxPaddingX'];
                                                     if (false !== stripos($boxPaddingX, '%')) {
                                                         $boxPaddingX = preg_replace('#[^0-9]+#is', '', $boxPaddingX);
                                                         $boxPaddingX = abs((int) $boxPaddingX);
                                                         $boxPaddingX = $watermarkTextBoxWidth * ($boxPaddingX / 100);
                                                     }
                                                     $boxPaddingX = abs((int) $boxPaddingX);
                                                     $watermarkTextBoxWidth += $boxPaddingX * 2;
                                                     $boxPaddingY = $paramsWatermarkOptions['text']['boxPaddingY'];
                                                     if (false !== stripos($boxPaddingY, '%')) {
                                                         $boxPaddingY = preg_replace('#[^0-9]+#is', '', $boxPaddingY);
                                                         $boxPaddingY = abs((int) $boxPaddingY);
                                                         $boxPaddingY = $watermarkTextBoxWidth * ($boxPaddingY / 100);
                                                     }
                                                     $boxPaddingY = abs((int) $boxPaddingY);
                                                     $watermarkTextBoxHeight += $boxPaddingY * 2;
                                                 }
                                             }
                                             $options['optimize_images_watermarks_watermark_text_margin_x'] = (int) $options['optimize_images_watermarks_watermark_text_margin_x'];
                                             $options['optimize_images_watermarks_watermark_text_margin_y'] = (int) $options['optimize_images_watermarks_watermark_text_margin_y'];
                                             if (isset($options['optimize_images_watermarks_watermark_position']) && $options['optimize_images_watermarks_watermark_position']) {
                                                 $options_optimize_images_watermarks_watermark_position = $options['optimize_images_watermarks_watermark_position'];
                                                 $options_optimize_images_watermarks_watermark_position = (array) $options_optimize_images_watermarks_watermark_position;
                                                 foreach ($options_optimize_images_watermarks_watermark_position as $value1) {
                                                     if ($value1) {
                                                         $value1 = trim($value1);
                                                         if ($value1) {
                                                             if ($paramsWatermarkOptions['text']) {
                                                                 if ($watermarkTextBoxWidth > 0 && $watermarkTextBoxHeight > 0) {
                                                                     $paramsWatermarkOptions_Temp1 = $paramsWatermarkOptions['text'];
                                                                     if (false !== stripos($value1, 'top_')) {
                                                                         $paramsWatermarkOptions_Temp1['y'] = 0 + abs((int) $options['optimize_images_watermarks_watermark_text_margin_y']);
                                                                     } else {
                                                                         if (false !== stripos($value1, 'middle_')) {
                                                                             $paramsWatermarkOptions_Temp1['y'] = floor(($imgOriginalCacheFile_RsGetImageFileInfo[1] - $watermarkTextBoxHeight) / 2) + $options['optimize_images_watermarks_watermark_text_margin_y'];
                                                                         } else {
                                                                             if (false !== stripos($value1, 'bottom_')) {
                                                                                 $paramsWatermarkOptions_Temp1['y'] = $imgOriginalCacheFile_RsGetImageFileInfo[1] - $watermarkTextBoxHeight - abs((int) $options['optimize_images_watermarks_watermark_text_margin_y']);
                                                                             }
                                                                         }
                                                                     }
                                                                     if (false !== stripos($value1, '_left')) {
                                                                         $paramsWatermarkOptions_Temp1['x'] = 0 + abs((int) $options['optimize_images_watermarks_watermark_text_margin_x']);
                                                                     } else {
                                                                         if (false !== stripos($value1, '_center')) {
                                                                             $paramsWatermarkOptions_Temp1['x'] = floor(abs($targetImgNeedWatermark_Width - $watermarkTextBoxWidth) / 2) + $options['optimize_images_watermarks_watermark_text_margin_x'];
                                                                         } else {
                                                                             if (false !== stripos($value1, '_right')) {
                                                                                 $paramsWatermarkOptions_Temp1['x'] = $targetImgNeedWatermark_Width - $watermarkTextBoxWidth - abs((int) $options['optimize_images_watermarks_watermark_text_margin_x']);
                                                                             }
                                                                         }
                                                                     }
                                                                     $paramsWatermarkOptions_Temp1['boxPaddingX'] = abs((int) $boxPaddingX);
                                                                     $paramsWatermarkOptions_Temp1['boxPaddingY'] = abs((int) $boxPaddingY);
                                                                     $pepVN_PHPImage->text($options['optimize_images_watermarks_watermark_text_value'], $paramsWatermarkOptions_Temp1);
                                                                 }
                                                             }
                                                         }
                                                     }
                                                 }
                                                 //loop watermark_position
                                             }
                                         }
                                         if ($paramsWatermarkOptions['image'] && $isCanWatermarkStatus1) {
                                             if (isset($paramsWatermarkOptions['image']['watermark_image_file_path']) && $paramsWatermarkOptions['image']['watermark_image_file_path']) {
                                                 $options['optimize_images_watermarks_watermark_image_margin_x'] = (int) $options['optimize_images_watermarks_watermark_image_margin_x'];
                                                 $options['optimize_images_watermarks_watermark_image_margin_y'] = (int) $options['optimize_images_watermarks_watermark_image_margin_y'];
                                                 $watermarkActualBoxWidth = 0;
                                                 $watermarkActualBoxHeight = 0;
                                                 $watermarkNewBoxWidth = 0;
                                                 $watermarkNewBoxHeight = 0;
                                                 $watermarkImg_RsGetImageInfo = PepVN_Images::getImageInfo($paramsWatermarkOptions['image']['watermark_image_file_path'], true);
                                                 if (isset($watermarkImg_RsGetImageInfo['image_resource']) && $watermarkImg_RsGetImageInfo['image_resource']) {
                                                     $watermarkActualBoxWidth = $watermarkImg_RsGetImageInfo['width'];
                                                     $watermarkActualBoxHeight = $watermarkImg_RsGetImageInfo['height'];
                                                 }
                                                 $watermarkImg_Resource = false;
                                                 $watermarkActualBoxWidth = (int) $watermarkActualBoxWidth;
                                                 $watermarkActualBoxHeight = (int) $watermarkActualBoxHeight;
                                                 $watermarkActualBoxRatio_WidthPerHeight = 0;
                                                 $watermarkNewBoxWidth = $watermarkActualBoxWidth;
                                                 $watermarkNewBoxHeight = $watermarkActualBoxHeight;
                                                 $watermarkImageResource = false;
                                                 if ($watermarkActualBoxWidth > 0 && $watermarkActualBoxHeight > 0) {
                                                     $watermarkActualBoxRatio_WidthPerHeight = $watermarkActualBoxWidth / $watermarkNewBoxHeight;
                                                     $watermarkActualBoxRatio_WidthPerHeight = (double) $watermarkActualBoxRatio_WidthPerHeight;
                                                     if (isset($options['optimize_images_watermarks_watermark_image_width']) && $options['optimize_images_watermarks_watermark_image_width']) {
                                                         if (false !== stripos($options['optimize_images_watermarks_watermark_image_width'], '%')) {
                                                             $percentNewSize = $options['optimize_images_watermarks_watermark_image_width'];
                                                             $percentNewSize = preg_replace('#[^0-9]+#i', '', $percentNewSize);
                                                             $percentNewSize = abs((int) $percentNewSize);
                                                             if ($percentNewSize > 100) {
                                                                 $percentNewSize = 100;
                                                             }
                                                             $watermarkNewBoxWidth = floor($targetImgNeedWatermark_Width * ($percentNewSize / 100));
                                                             $watermarkNewBoxWidth = (int) $watermarkNewBoxWidth;
                                                             $watermarkNewBoxHeight = floor($watermarkNewBoxWidth / $watermarkActualBoxRatio_WidthPerHeight);
                                                             $watermarkNewBoxHeight = (int) $watermarkNewBoxHeight;
                                                         } else {
                                                             $options['optimize_images_watermarks_watermark_image_width'] = abs((int) $options['optimize_images_watermarks_watermark_image_width']);
                                                             if ($options['optimize_images_watermarks_watermark_image_width'] > 0) {
                                                                 $watermarkNewBoxWidth = $options['optimize_images_watermarks_watermark_image_width'];
                                                                 $watermarkNewBoxHeight = floor($watermarkNewBoxWidth / $watermarkActualBoxRatio_WidthPerHeight);
                                                                 $watermarkNewBoxHeight = (int) $watermarkNewBoxHeight;
                                                             }
                                                         }
                                                     }
                                                     $watermarkImg_Resource = PepVN_Images::create_blank_transparent_image_resource($watermarkNewBoxWidth, $watermarkNewBoxHeight);
                                                     imagecopyresampled($watermarkImg_Resource, $watermarkImg_RsGetImageInfo['image_resource'], 0, 0, 0, 0, $watermarkNewBoxWidth, $watermarkNewBoxHeight, $watermarkActualBoxWidth, $watermarkActualBoxHeight);
                                                     if ($watermarkImg_Resource && is_resource($watermarkImg_Resource) && isset($options['optimize_images_watermarks_watermark_position']) && $options['optimize_images_watermarks_watermark_position']) {
                                                         $options_optimize_images_watermarks_watermark_position = $options['optimize_images_watermarks_watermark_position'];
                                                         $options_optimize_images_watermarks_watermark_position = (array) $options_optimize_images_watermarks_watermark_position;
                                                         foreach ($options_optimize_images_watermarks_watermark_position as $value1) {
                                                             if ($value1) {
                                                                 $value1 = trim($value1);
                                                                 if ($value1) {
                                                                     $paramsWatermarkOptions_Temp1 = array();
                                                                     $paramsWatermarkOptions_Temp1['x'] = 0;
                                                                     $paramsWatermarkOptions_Temp1['y'] = 0;
                                                                     if (false !== stripos($value1, 'top_')) {
                                                                         $paramsWatermarkOptions_Temp1['y'] = 0 + abs((int) $options['optimize_images_watermarks_watermark_image_margin_y']);
                                                                     } else {
                                                                         if (false !== stripos($value1, 'middle_')) {
                                                                             $paramsWatermarkOptions_Temp1['y'] = floor(($imgOriginalCacheFile_RsGetImageFileInfo[1] - $watermarkNewBoxHeight) / 2) + $options['optimize_images_watermarks_watermark_image_margin_y'];
                                                                         } else {
                                                                             if (false !== stripos($value1, 'bottom_')) {
                                                                                 $paramsWatermarkOptions_Temp1['y'] = $imgOriginalCacheFile_RsGetImageFileInfo[1] - $watermarkNewBoxHeight - abs((int) $options['optimize_images_watermarks_watermark_image_margin_y']);
                                                                             }
                                                                         }
                                                                     }
                                                                     if (false !== stripos($value1, '_left')) {
                                                                         $paramsWatermarkOptions_Temp1['x'] = 0 + abs((int) $options['optimize_images_watermarks_watermark_image_margin_x']);
                                                                     } else {
                                                                         if (false !== stripos($value1, '_center')) {
                                                                             $paramsWatermarkOptions_Temp1['x'] = floor(abs($targetImgNeedWatermark_Width - $watermarkNewBoxWidth) / 2) + $options['optimize_images_watermarks_watermark_image_margin_x'];
                                                                         } else {
                                                                             if (false !== stripos($value1, '_right')) {
                                                                                 $paramsWatermarkOptions_Temp1['x'] = $targetImgNeedWatermark_Width - $watermarkNewBoxWidth - abs((int) $options['optimize_images_watermarks_watermark_image_margin_x']);
                                                                             }
                                                                         }
                                                                     }
                                                                     $pepVN_PHPImage->drawFromResource($watermarkImg_Resource, $paramsWatermarkOptions_Temp1);
                                                                 }
                                                             }
                                                         }
                                                         //loop watermark_position
                                                     }
                                                 }
                                                 if (isset($watermarkImg_RsGetImageInfo['image_resource']) && $watermarkImg_RsGetImageInfo['image_resource'] && is_resource($watermarkImg_RsGetImageInfo['image_resource'])) {
                                                     imagedestroy($watermarkImg_RsGetImageInfo['image_resource']);
                                                 }
                                                 $watermarkImg_RsGetImageInfo = false;
                                                 if ($watermarkImg_Resource && is_resource($watermarkImg_Resource)) {
                                                     imagedestroy($watermarkImg_Resource);
                                                 }
                                                 $watermarkImg_Resource = false;
                                             }
                                         }
                                         $pepVN_PHPImage->save($imgOptimizedFilePath1, false, true);
                                         $pepVN_PHPImage->cleanup();
                                         unset($pepVN_PHPImage);
                                     }
                                     $valueTemp1 = $imgOptimizedFilePath1;
                                     if ($valueTemp1 && is_file($valueTemp1)) {
                                         $valueTemp2 = filesize($valueTemp1);
                                         if ($valueTemp2 && $valueTemp2 > 0) {
                                             $rs_getimagesize = getimagesize($valueTemp1);
                                             if ($rs_getimagesize && isset($rs_getimagesize[0]) && $rs_getimagesize[0]) {
                                                 $resultData['image_optimized_file_path'] = $valueTemp1;
                                                 $resultData['image_optimized_file_url'] = str_replace($this->_folderStorePath, $this->_folderStoreUrl, $resultData['image_optimized_file_path']);
                                                 $resultData['image_optimized_width'] = (int) $rs_getimagesize[0];
                                                 $resultData['image_optimized_height'] = (int) $rs_getimagesize[1];
                                             }
                                         }
                                     }
                                 }
                             }
                         }
                     }
                 }
                 if ($resultData['image_optimized_file_path']) {
                     if ($keyConfigsProcessedData) {
                         if (isset($options['optimize_images_remove_files_available_different_configuration_enable']) && 'on' === $options['optimize_images_remove_files_available_different_configuration_enable']) {
                             $this->optimize_images_clean_unuse_image(array('optimized_image_folder_path' => $input_parameters['optimized_image_folder_path'], 'key_file' => $keyFileConfigsProcessedData));
                         }
                     }
                 }
             }
         }
     }
     return $resultData;
 }
Пример #2
0
 public function process_attributes_links($text)
 {
     $options = self::getOption();
     if (!isset($options['nofollow_url'])) {
         $options['nofollow_url'] = '';
     }
     $options['nofollow_url'] = (string) $options['nofollow_url'];
     $options['nofollow_url'] = trim($options['nofollow_url']);
     if (isset($options['nofollow_url']) && $options['nofollow_url'] || isset($options['external_new_window']) && 'on' === $options['external_new_window'] || isset($options['external_nofollow']) && 'on' === $options['external_nofollow']) {
         if (!isset($options['external_new_window'])) {
             $options['external_new_window'] = '';
         }
         if (!isset($options['external_exclude_url'])) {
             $options['external_exclude_url'] = '';
         }
         $options['external_exclude_url'] = (string) $options['external_exclude_url'];
         $options['external_exclude_url'] = trim($options['external_exclude_url']);
         $nofollow_url = PepVN_Data::cleanPregPatternsArray($options['nofollow_url']);
         $nofollow_url = implode('|', $nofollow_url);
         $nofollow_url = trim($nofollow_url);
         $external_exclude_url = PepVN_Data::cleanPregPatternsArray($options['external_exclude_url']);
         $external_exclude_url = implode('|', $external_exclude_url);
         $external_exclude_url = trim($external_exclude_url);
         $keyCacheProcessText = Utils::hashKey(array(__CLASS__ . __METHOD__, $text, $nofollow_url, $external_exclude_url, $options['external_new_window'], 'process_text'));
         $tmp = TempDataAndCacheFile::get_cache($keyCacheProcessText, true);
         if (null !== $tmp) {
             return $tmp;
         }
         $patternSelfHost = '#^https?://' . Utils::preg_quote(PepVN_Data::$defaultParams['parseedUrlFullRequest']['host']) . '.+#i';
         $arraySearchAndReplace = array();
         $rsOne = PepVN_Data::escapeHtmlTags($text);
         unset($rsOne['content']);
         if (!empty($rsOne['patterns'])) {
             foreach ($rsOne['patterns'] as $keyOne => $valueOne) {
                 unset($rsOne['patterns'][$keyOne]);
                 if (preg_match('#<a[^>]+>#i', $keyOne, $matched1)) {
                     if (preg_match('#href=(\'|")(https?://[^"\']+)\\1#i', $keyOne, $matched2)) {
                         $oldValue = $keyOne;
                         $newValue = $keyOne;
                         if (isset($matched2[2]) && $matched2[2]) {
                             $matched2[2] = trim($matched2[2]);
                             $isNofollowStatus1 = false;
                             $isExternalLinksStatus1 = false;
                             if (!preg_match($patternSelfHost, $matched2[2])) {
                                 $isExternalLinksStatus1 = true;
                             }
                             if ($nofollow_url && preg_match('#(' . $nofollow_url . ')#i', $matched2[2], $matched3)) {
                                 $isNofollowStatus1 = true;
                             } else {
                                 if ($options['external_nofollow']) {
                                     if ($isExternalLinksStatus1) {
                                         //is external links = true
                                         if ($external_exclude_url && preg_match('#(' . $external_exclude_url . ')#i', $matched2[2], $matched3)) {
                                         } else {
                                             $isNofollowStatus1 = true;
                                         }
                                     }
                                 }
                             }
                             if ($options['external_new_window']) {
                                 if ($isExternalLinksStatus1) {
                                     $newValue = preg_replace('#target=(\'|")([^"\']+)\\1#i', '', $newValue);
                                     $newValue = preg_replace('#<a(.+)#is', '<a target="_blank" \\1', $newValue);
                                 }
                             }
                             if ($isNofollowStatus1) {
                                 if (preg_match('#rel=(\'|")([^"\']+)\\1#i', $newValue, $matched3)) {
                                     $newValue = preg_replace('#(rel=)(\'|")([^"\']+)\\2#i', '\\1\\2\\3 nofollow \\2', $newValue);
                                 } else {
                                     $newValue = preg_replace('#<a(.+)#is', '<a rel="nofollow" \\1', $newValue);
                                 }
                             }
                         }
                         if ($oldValue !== $newValue) {
                             $arraySearchAndReplace[$oldValue] = $newValue;
                         }
                     }
                     unset($matched2);
                 }
                 unset($matched2);
                 unset($keyOne, $valueOne);
             }
             if (!empty($arraySearchAndReplace)) {
                 $text = str_replace(array_keys($arraySearchAndReplace), array_values($arraySearchAndReplace), $text);
             }
             unset($arraySearchAndReplace);
         }
         TempDataAndCacheFile::set_cache($keyCacheProcessText, $text, true);
     }
     return $text;
 }