diff options
Diffstat (limited to 'app/class')
| -rw-r--r-- | app/class/image.php | 70 | 
1 files changed, 70 insertions, 0 deletions
| diff --git a/app/class/image.php b/app/class/image.php new file mode 100644 index 0000000..6b73cae --- /dev/null +++ b/app/class/image.php @@ -0,0 +1,70 @@ +<?php + +/* + * SCROTT IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * For more information, please refer to UNLICENSE + */ + +/* + * This file defines custom image manipulation routines for Scrott.  All + * are available in the global namespace. + */ + +/* + * Mappings from image MIME types to PHP open/write functions + */ +$_IMG_OPEN_FUNCS['image/jpeg'] = "imagecreatefromjpeg"; +$_IMG_OPEN_FUNCS['image/jpg']  = "imagecreatefromjpeg"; +$_IMG_OPEN_FUNCS['image/png']  = "imagecreatefrompng"; + +$_IMG_WRITE_FUNCS['image/jpeg'] = "imagejpeg"; +$_IMG_WRITE_FUNCS['image/jpg']  = "imagejpeg"; +$_IMG_WRITE_FUNCS['image/png']  = "imagepng"; + +/* + * Open the given image and crop it, such that the result is a square + * image whose side length is equal to the smaller of the original + * dimensions and whose area is centered on the area of the original + * image.  The resulting image is written to the same path as provided, + * overwriting the image. + */ +function imageSquareCrop(string $uri) : bool +{ +    global $_IMG_OPEN_FUNCS; +    global $_IMG_WRITE_FUNCS; + +    $mime = mime_content_type($uri); +    $img = $_IMG_OPEN_FUNCS[$mime]($uri); + +    if ($img === false) +        return false; + +    $wid = imagesx($img); +    $hei = imagesy($img); + +    $rec = array(); +    $rec['width']  = min($wid, $hei); +    $rec['height'] = $rec['width']; +    $rec['y'] = ($hei / 2) - ($rec['height'] / 2); +    $rec['x'] = ($wid / 2) - ($rec['width'] / 2); + +    $cropped = imagecrop($img, $rec); +    imagedestroy($img); + +    if ($cropped === false) +        return false; + +    $ret = $_IMG_WRITE_FUNCS[$mime]($cropped, $uri); +    imagedestroy($cropped); + +    return $ret; +} + +?> | 
