2016-09-03 17:09:49 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Helpers;
|
|
|
|
|
|
|
|
use App\AlbumSources\IAlbumSource;
|
|
|
|
use App\Photo;
|
|
|
|
|
|
|
|
class ImageHelper
|
|
|
|
{
|
2016-09-03 22:13:05 +01:00
|
|
|
public function generateThumbnail($gdImageResource, Photo $photo, $thumbnailInfo)
|
2016-09-03 17:09:49 +01:00
|
|
|
{
|
|
|
|
$thumbnailWidth = intval($thumbnailInfo['width']);
|
|
|
|
$thumbnailHeight = intval($thumbnailInfo['height']);
|
2016-09-04 21:59:32 +01:00
|
|
|
|
|
|
|
// If image is portrait, restrict the height by the relevant aspect ratio
|
|
|
|
if ($photo->height > $photo->width)
|
|
|
|
{
|
|
|
|
$aspectRatio = $photo->height / $photo->width;
|
|
|
|
$thumbnailWidth = intval($thumbnailInfo['height']) / $aspectRatio;
|
|
|
|
$thumbnailHeight = intval($thumbnailInfo['height']);
|
|
|
|
}
|
|
|
|
|
2016-09-03 17:09:49 +01:00
|
|
|
$thumbnailImageResource = imagecreatetruecolor($thumbnailWidth, $thumbnailHeight);
|
|
|
|
|
|
|
|
imagecopyresized(
|
|
|
|
$thumbnailImageResource,
|
|
|
|
$gdImageResource,
|
|
|
|
0,
|
|
|
|
0,
|
|
|
|
0,
|
|
|
|
0,
|
|
|
|
$thumbnailWidth,
|
|
|
|
$thumbnailHeight,
|
|
|
|
$photo->width,
|
|
|
|
$photo->height
|
|
|
|
);
|
2016-09-03 22:13:05 +01:00
|
|
|
|
|
|
|
// TODO make the /tmp folder configurable
|
|
|
|
$tempName = tempnam('/tmp', 'btw_thumb_');
|
|
|
|
$tempNameWithExtension = ($tempName . '.jpg');
|
|
|
|
rename($tempName, $tempNameWithExtension);
|
2016-09-03 17:09:49 +01:00
|
|
|
|
|
|
|
// TODO make thumbnail quality configurable
|
2016-09-03 22:13:05 +01:00
|
|
|
imagejpeg($thumbnailImageResource, $tempNameWithExtension, 90);
|
|
|
|
|
|
|
|
return $tempNameWithExtension;
|
2016-09-03 17:09:49 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
public function openImage($imagePath, &$imageInfo)
|
|
|
|
{
|
|
|
|
$imageInfo = getimagesize($imagePath);
|
|
|
|
|
|
|
|
$im = false;
|
|
|
|
$type = $imageInfo[2];
|
|
|
|
$allowedTypes = [
|
|
|
|
IMG_GIF,
|
|
|
|
IMG_PNG,
|
|
|
|
IMG_JPEG,
|
|
|
|
IMG_WBMP
|
|
|
|
];
|
|
|
|
|
|
|
|
if (!in_array($type, $allowedTypes))
|
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch ($type)
|
|
|
|
{
|
|
|
|
case IMG_GIF:
|
|
|
|
$im = imagecreatefromgif($imagePath);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case IMG_JPEG:
|
|
|
|
$im = imagecreatefromjpeg($imagePath);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case IMG_PNG:
|
|
|
|
$im = imagecreatefrompng($imagePath);
|
|
|
|
break;
|
|
|
|
|
|
|
|
case IMG_WBMP:
|
|
|
|
$im = imagecreatefromwbmp($imagePath);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $im;
|
|
|
|
}
|
2016-09-05 09:58:37 +01:00
|
|
|
|
|
|
|
public function rotateImage($imageResource, $angle)
|
|
|
|
{
|
|
|
|
imagesetinterpolation($imageResource, IMG_SINC);
|
|
|
|
|
|
|
|
return imagerotate($imageResource, $angle, 0);
|
|
|
|
|
|
|
|
/*switch ($angle)
|
|
|
|
{
|
|
|
|
case 90:
|
|
|
|
case 270:
|
|
|
|
// Need a new image canvas
|
|
|
|
$maxDimension = ($photo->width > $photo->height ? $photo->width : $photo->height);
|
|
|
|
$newImageResource = imagecreatetruecolor($maxDimension, $maxDimension);
|
|
|
|
imagecopy($newImageResource, $imageResource, 0, 0, 0, 0, $photo->width, $photo->height);
|
|
|
|
$newImageResource = imagerotate($newImageResource, $angle, 0);
|
|
|
|
$imageResource = $newImageResource;
|
|
|
|
break;
|
|
|
|
|
|
|
|
case 180:
|
|
|
|
// We can just rotate this in-place
|
|
|
|
$imageResource = imagerotate($imageResource, $angle, 0);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
return $imageResource;*/
|
|
|
|
}
|
2016-09-03 17:09:49 +01:00
|
|
|
}
|