wikipoints/ground/classes/Image.php

145 lines
4.0 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, $noWatermark = false, $folder = '')
{
$sizes = App::getConfig('images');
$pathInfo = pathinfo($_SERVER['SCRIPT_FILENAME']);
$uploaddir = $pathInfo['dirname'] . '/photos/' . $folder;
$watermarkDir = App::getBasedir() . 'watermarks/';
foreach ($sizes as $dir => $size) {
$watermark = isset($size[3]) ? $watermarkDir . $size[3] : '';
$watermark = $noWatermark ? '' : $watermark;
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
);
}
/**
* Создаёт аватарку из ссылки. Размеры 100*100
* @param string $src
* @param string $target
*/
public static function createAvatar($src, $target)
{
return self::imgResize($src, $target, 100, 100, 100);
}
/**
* Функция img_resize(): генерация thumbnails
* Параметры:
* $src - имя исходного файла
* $dest - имя генерируемого файла
* $width, $height - ширина и высота генерируемого изображения, в пикселях
* Необязательные параметры:
* $quality - качество генерируемого JPEG, по умолчанию 90; максимальное 100;
*/
private static function imgResize($src, $dest, $width, $height, $quality = 90, $watermark = '')
{
if (!Helper::isUrl($src) && !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;
}
}