132 lines
3.6 KiB
PHP
132 lines
3.6 KiB
PHP
<?php
|
|
|
|
class Image
|
|
{
|
|
|
|
/**
|
|
*
|
|
* @param string $path
|
|
* @return mix string-base64 or false
|
|
*/
|
|
public static function toBase64($path)
|
|
{
|
|
if ($path) {
|
|
$type = pathinfo($path, PATHINFO_EXTENSION);
|
|
|
|
if (!$type) {
|
|
return FALSE;
|
|
}
|
|
|
|
$data = file_get_contents($path);
|
|
|
|
return $data ? 'data:image/' . $type . ';base64,' . base64_encode($data) : FALSE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
/**
|
|
* Создаёт все требуемые размеры изображения и раскладывает их по папкам.
|
|
* @param type $imgName
|
|
*/
|
|
public static function createAllSizes($imgName)
|
|
{
|
|
$sizes = App::getConfig('images');
|
|
$pathInfo = pathinfo($_SERVER['SCRIPT_FILENAME']);
|
|
$uploaddir = $pathInfo['dirname'] . '/photos/';
|
|
$watermarkDir = App::getBasedir() . 'watermarks/';
|
|
|
|
foreach ($sizes as $dir => $size) {
|
|
$watermark = isset($size[3]) ? $watermarkDir . $size[3] : '';
|
|
self::imgResize(
|
|
$uploaddir . $imgName, // Source - original image
|
|
$uploaddir . $dir . '/' . $imgName, // Destination
|
|
$size[0], // X
|
|
$size[1], // Y
|
|
$size[2], // Quality
|
|
$watermark// Watermark
|
|
);
|
|
}
|
|
|
|
return TRUE; // o_O
|
|
}
|
|
|
|
public static function createCustomSize($imgFullName, $x, $y)
|
|
{
|
|
self::imgResize(
|
|
$imgFullName, null, $x, $y
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Функция img_resize(): генерация thumbnails
|
|
* Параметры:
|
|
* $src - имя исходного файла
|
|
* $dest - имя генерируемого файла
|
|
* $width, $height - ширина и высота генерируемого изображения, в пикселях
|
|
* Необязательные параметры:
|
|
* $quality - качество генерируемого JPEG, по умолчанию 90; максимальное 100;
|
|
*/
|
|
private static function imgResize($src, $dest, $width, $height, $quality = 90, $watermark = '')
|
|
{
|
|
if (!file_exists($src))
|
|
return false;
|
|
|
|
$size = getimagesize($src);
|
|
|
|
if ($size === false)
|
|
return false;
|
|
|
|
// Определяем исходный формат по MIME-информации, предоставленной
|
|
// функцией getimagesize, и выбираем соответствующую формату
|
|
// imagecreatefrom-функцию.
|
|
$format = strtolower(substr($size['mime'], strpos($size['mime'], '/') + 1));
|
|
$icfunc = "imagecreatefrom" . $format;
|
|
if (!function_exists($icfunc))
|
|
return false;
|
|
|
|
$x_ratio = $width / $size[0];
|
|
$y_ratio = $height / $size[1];
|
|
|
|
$ratio = max($x_ratio, $y_ratio);
|
|
$use_x_ratio = ($x_ratio == $ratio);
|
|
|
|
$new_width = $use_x_ratio ? $width : floor($size[0] * $ratio);
|
|
$new_height = !$use_x_ratio ? $height : floor($size[1] * $ratio);
|
|
$new_left = $use_x_ratio ? 0 : floor(($width - $new_width) / 2);
|
|
$new_top = !$use_x_ratio ? 0 : floor(($height - $new_height) / 2);
|
|
|
|
$isrc = $icfunc($src);
|
|
$idest = imagecreatetruecolor($width, $height);
|
|
|
|
imagefill($idest, 0, 0, 0xFFFFFF);
|
|
imagecopyresampled($idest, $isrc, $new_left, $new_top, 0, 0, $new_width, $new_height, $size[0], $size[1]);
|
|
|
|
if ($watermark) {
|
|
$stamp = imagecreatefrompng($watermark);
|
|
|
|
$marge_right = 10;
|
|
$marge_bottom = 2;
|
|
$sx = imagesx($stamp);
|
|
$sy = imagesy($stamp);
|
|
|
|
imagecopy($idest, $stamp, imagesx($idest) - $sx - $marge_right, imagesy($idest) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp));
|
|
}
|
|
//$iofunct = "image".$format;
|
|
//$iofunct($idest, $dest, $quality);
|
|
if ($dest) {
|
|
imagejpeg($idest, $dest, $quality);
|
|
} else {
|
|
header('Content-Type: image/jpeg');
|
|
imagejpeg($idest);
|
|
die;
|
|
}
|
|
|
|
imagedestroy($isrc);
|
|
imagedestroy($idest);
|
|
|
|
return true;
|
|
}
|
|
|
|
}
|