Пример #1
0
 public static function singleton()
 {
     if (!isset(self::$instance)) {
         $className = __CLASS__;
         self::$instance = new $className();
     }
     return self::$instance;
 }
 /**
  * Crops Image.
  *
  * @since 3.5.0
  * @access public
  *
  * @param string|int $src The source file or Attachment ID.
  * @param int $src_x The start x position to crop from.
  * @param int $src_y The start y position to crop from.
  * @param int $src_w The width to crop.
  * @param int $src_h The height to crop.
  * @param int $dst_w Optional. The destination width.
  * @param int $dst_h Optional. The destination height.
  * @param boolean $src_abs Optional. If the source crop points are absolute.
  * @return boolean|WP_Error
  */
 public function crop($src_x, $src_y, $src_w, $src_h, $dst_w = null, $dst_h = null, $src_abs = false)
 {
     $ar = $src_w / $src_h;
     $dst_ar = $dst_w / $dst_h;
     if (isset($_GET['pte-fit-crop-color']) && abs($ar - $dst_ar) > 0.01) {
         PteLogger::debug(sprintf("IMAGICK - AR: '%f'\tOAR: '%f'", $ar, $dst_ar));
         // Crop the image to the correct aspect ratio...
         if ($dst_ar > $ar) {
             // constrain to the dst_h
             $tmp_dst_h = $dst_h;
             $tmp_dst_w = $dst_h * $ar;
             $tmp_dst_y = 0;
             $tmp_dst_x = $dst_w / 2 - $tmp_dst_w / 2;
         } else {
             $tmp_dst_w = $dst_w;
             $tmp_dst_h = $dst_w / $ar;
             $tmp_dst_x = 0;
             $tmp_dst_y = $dst_h / 2 - $tmp_dst_h / 2;
         }
         //$color = this::getImagickPixel( $_GET['pte-fit-crop-color'] );
         if (preg_match("/^#[a-fA-F0-9]{6}\$/", $_GET['pte-fit-crop-color'])) {
             $color = new ImagickPixel($_GET['pte-fit-crop-color']);
         }
         //else {
         //    PteLogger::debug( "setting transparent/white" );
         //    $color = new ImagickPixel( 'white' );
         //    //$color->setColorValue( Imagick::COLOR_ALPHA, 0 );
         //}
         try {
             // crop the original image
             $this->image->cropImage($src_w, $src_h, $src_x, $src_y);
             $this->image->scaleImage($tmp_dst_w, $tmp_dst_h);
             // Create a new image and then compose the old one onto it.
             $img = new Imagick();
             $img->newImage($dst_w, $dst_h, isset($color) ? $color : 'white');
             $img->setImageFormat($this->image->getImageFormat());
             if (!isset($color)) {
                 $img->setImageOpacity(0.0);
             }
             $img->compositeImage($this->image, Imagick::COMPOSITE_DEFAULT, $tmp_dst_x, $tmp_dst_y);
             $img->flattenImages();
             $this->image = $img;
         } catch (Exception $e) {
             return new WP_Error('image_crop_error', __('Image crop failed.'), $this->file);
         }
         return $this->update_size();
     }
     return parent::crop($src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, $src_abs);
 }
 /**
  * Crops Image.
  *
  * @since 3.5.0
  * @access public
  *
  * @param string|int $src The source file or Attachment ID.
  * @param int $src_x The start x position to crop from.
  * @param int $src_y The start y position to crop from.
  * @param int $src_w The width to crop.
  * @param int $src_h The height to crop.
  * @param int $dst_w Optional. The destination width.
  * @param int $dst_h Optional. The destination height.
  * @param boolean $src_abs Optional. If the source crop points are absolute.
  * @return boolean|WP_Error
  */
 public function crop($src_x, $src_y, $src_w, $src_h, $dst_w = null, $dst_h = null, $src_abs = false)
 {
     $ar = $src_w / $src_h;
     $dst_ar = $dst_w / $dst_h;
     if (isset($_GET['pte-fit-crop-color']) && abs($ar - $dst_ar) > 0.01) {
         PteLogger::debug(sprintf("AR: '%f'\tOAR: '%f'", $ar, $dst_ar));
         // Crop the image to the correct aspect ratio...
         if ($dst_ar > $ar) {
             // constrain to the dst_h
             $tmp_dst_h = $dst_h;
             $tmp_dst_w = $dst_h * $ar;
             $tmp_dst_y = 0;
             $tmp_dst_x = $dst_w / 2 - $tmp_dst_w / 2;
         } else {
             $tmp_dst_w = $dst_w;
             $tmp_dst_h = $dst_w / $ar;
             $tmp_dst_x = 0;
             $tmp_dst_y = $dst_h / 2 - $tmp_dst_h / 2;
         }
         // copy $this->image unto a new image with the right width/height.
         $img = wp_imagecreatetruecolor($dst_w, $dst_h);
         if (function_exists('imageantialias')) {
             imageantialias($img, true);
         }
         if (preg_match("/^#[a-fA-F0-9]{6}\$/", $_GET['pte-fit-crop-color'])) {
             $c = self::getRgbFromHex($_GET['pte-fit-crop-color']);
             $color = imagecolorallocate($img, $c[0], $c[1], $c[2]);
         } else {
             PteLogger::debug("setting transparent/white");
             //$color = imagecolorallocate( $img, 100, 100, 100 );
             $color = imagecolorallocatealpha($img, 255, 255, 255, 127);
         }
         imagefilledrectangle($img, 0, 0, $dst_w, $dst_h, $color);
         imagecopyresampled($img, $this->image, $tmp_dst_x, $tmp_dst_y, $src_x, $src_y, $tmp_dst_w, $tmp_dst_h, $src_w, $src_h);
         if (is_resource($img)) {
             imagedestroy($this->image);
             $this->image = $img;
             $this->update_size();
             return true;
         }
         return new WP_Error('image_crop_error', __('Image crop failed.'), $this->file);
     }
     return parent::crop($src_x, $src_y, $src_w, $src_h, $dst_w, $dst_h, $src_abs);
 }
Пример #4
0
function pte_get_jpeg_quality($quality)
{
    $options = pte_get_options();
    $jpeg_compression = $options['pte_jpeg_compression'];
    if (isset($_GET['pte-jpeg-compression'])) {
        $tmp_jpeg = intval($_GET['pte-jpeg-compression']);
        if (0 <= $tmp_jpeg && $tmp_jpeg <= 100) {
            $jpeg_compression = $tmp_jpeg;
        }
    }
    PteLogger::debug("COMPRESSION: " . $jpeg_compression);
    return $jpeg_compression;
}
Пример #5
0
function pte_ajax()
{
    // Move all adjuntant functions to a separate file and include that here
    require_once PTE_PLUGINPATH . 'php/functions.php';
    PteLogger::debug("PARAMETERS: " . print_r($_REQUEST, true));
    switch ($_GET['pte-action']) {
        case "iframe":
            pte_init_iframe();
            break;
        case "resize-images":
            pte_resize_images();
            break;
        case "confirm-images":
            pte_confirm_images();
            break;
        case "delete-images":
            pte_delete_images();
            break;
        case "get-thumbnail-info":
            $id = (int) $_GET['id'];
            if (pte_check_id($id)) {
                print json_encode(pte_get_all_alternate_size_information($id));
            }
            break;
        case "change-options":
            pte_update_user_options();
            break;
    }
    die;
}
Пример #6
0
function pte_rmdir($dir)
{
    $logger = PteLogger::singleton();
    if (!is_dir($dir) || !preg_match("/ptetmp/", $dir)) {
        $logger->warn("Tried to delete invalid directory: {$dir}");
        return;
    }
    foreach (scandir($dir) as $file) {
        if ("." == $file || ".." == $file) {
            continue;
        }
        $full_path_to_file = $dir . DIRECTORY_SEPARATOR . $file;
        $logger->debug("DELETING: {$full_path_to_file}");
        unlink($full_path_to_file);
    }
    rmdir($dir);
}
function pte_ajax()
{
    // Move all adjuntant functions to a separate file and include that here
    require_once PTE_PLUGINPATH . 'php/functions.php';
    $logger = PteLogger::singleton();
    $logger->debug("PARAMETERS: " . print_r($_REQUEST, true));
    switch ($_GET['pte-action']) {
        case "test":
            pte_test();
            break;
        case "launch":
            pte_launch();
            break;
        case "resize-images":
            pte_resize_images();
            break;
        case "confirm-images":
            pte_confirm_images();
            break;
        case "delete-images":
            pte_delete_images();
            break;
    }
    die;
}