-
Notifications
You must be signed in to change notification settings - Fork 8
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: resize behaviour for WordPress defined image sizes, preserve cro…
…pping for custom sizes test: adds test for image sizes
- Loading branch information
Showing
8 changed files
with
310 additions
and
131 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,162 @@ | ||
<?php | ||
|
||
/** | ||
* Class Optml_Resize | ||
*/ | ||
class Optml_Resize extends Optml_Property_Type { | ||
|
||
|
||
/** | ||
* Resize the image while keeping aspect ratio to fit given size. | ||
*/ | ||
const RESIZE_FILL = 'fill'; | ||
/** | ||
* Resize the image while keeping aspect ratio | ||
* to fill given size and cropping projecting parts. | ||
*/ | ||
const RESIZE_FIT = 'fit'; | ||
/** | ||
* Crops the image to a given size. | ||
*/ | ||
const RESIZE_CROP = 'crop'; | ||
|
||
|
||
/** | ||
* Top edge. | ||
*/ | ||
const GRAVITY_NORTH = 'no'; | ||
/** | ||
* Bottom Edge. | ||
*/ | ||
const GRAVITY_SOUTH = 'so'; | ||
/** | ||
* Right Edge. | ||
*/ | ||
const GRAVITY_EAST = 'ea'; | ||
/** | ||
* Left edge. | ||
*/ | ||
const GRAVITY_WEST = 'we'; | ||
|
||
/** | ||
* Top right corner. | ||
*/ | ||
const GRAVITY_NORTH_WEST = 'noea'; | ||
/** | ||
* Top left corner. | ||
*/ | ||
const GRAVITY_NORTH_EAST = 'nowe'; | ||
/** | ||
* Bottom right corner. | ||
*/ | ||
const GRAVITY_SOUTH_EAST = 'soea'; | ||
/** | ||
* Bottom left corner. | ||
*/ | ||
const GRAVITY_SOUTH_WEST = 'sowe'; | ||
|
||
|
||
/** | ||
* Center | ||
*/ | ||
const GRAVITY_CENTER = 'ce'; | ||
/** | ||
* Detects the most "interesting" section of the image and | ||
* considers it as the center of the resulting image | ||
*/ | ||
const GRAVITY_SMART = 'sm'; | ||
/** | ||
* Detects the most "interesting" section of the image and | ||
* considers it as the center of the resulting image | ||
*/ | ||
const GRAVITY_FOCUS_POINT = 'fp'; | ||
|
||
/** | ||
* Floating point numbers between 0 and 1 that define the coordinates of the resulting image for X axis. | ||
* | ||
* @var int Focus point X. | ||
*/ | ||
private $focus_point_x = 0; | ||
/** | ||
* Floating point numbers between 0 and 1 that define the coordinates of the resulting image for X axis. | ||
* | ||
* @var int Focus point Y. | ||
*/ | ||
private $focus_point_y = 0; | ||
|
||
/** | ||
* Resize type. | ||
* | ||
* @var string Resize type string. | ||
*/ | ||
private $resize_type = ''; | ||
|
||
/** | ||
* Gravity type. | ||
* | ||
* @var string Gravity type string. | ||
*/ | ||
private $gravity = ''; | ||
|
||
/** | ||
* Optml_Resize constructor. | ||
*/ | ||
public function __construct( $value = array() ) { | ||
$this->set( $value ); | ||
} | ||
|
||
/** | ||
* Set property value. | ||
* | ||
* @param mixed $value Value to set. | ||
*/ | ||
public function set( $value ) { | ||
$this->resize_type = isset( $value['type'] ) ? $value['type'] : ''; | ||
$this->gravity = isset( $value['gravity'] ) ? is_array( $value['gravity'] ) ? self::GRAVITY_FOCUS_POINT : $value['gravity'] : ''; | ||
if ( $this->gravity === self::GRAVITY_FOCUS_POINT ) { | ||
$this->focus_point_x = $value['gravity'][0]; | ||
$this->focus_point_y = $value['gravity'][1]; | ||
} | ||
|
||
} | ||
|
||
/** | ||
* Return property value. | ||
* | ||
* @return mixed | ||
*/ | ||
public function get() { | ||
if ( empty( $this->resize_type ) ) { | ||
return []; | ||
} | ||
if ( empty( $this->gravity ) ) { | ||
return [ 'type' => $this->resize_type ]; | ||
} | ||
if ( $this->gravity === self::GRAVITY_FOCUS_POINT ) { | ||
return [ 'type' => $this->gravity, 'gravity' => [ $this->focus_point_x, $this->focus_point_y ] ]; | ||
} | ||
|
||
return [ | ||
'type' => $this->resize_type, | ||
'gravity' => $this->gravity, | ||
]; | ||
} | ||
|
||
/** | ||
* Return ImageProxy URL formatted string property. | ||
* | ||
* @return string | ||
*/ | ||
public function toString() { | ||
|
||
$resize = sprintf( 'rt:%s', $this->resize_type ); | ||
|
||
$resize .= sprintf( '/g:%s', $this->gravity ); | ||
|
||
if ( $this->gravity === self::GRAVITY_FOCUS_POINT ) { | ||
$resize .= sprintf( ':%s:%s', $this->focus_point_x, $this->focus_point_y ); | ||
} | ||
|
||
return $resize; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.