2018-11-12 03:08:33 +01:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace Friendica\Directory\Utils;
|
|
|
|
|
|
|
|
/**
|
2020-06-13 19:15:53 +02:00
|
|
|
* @author Hypolite Petovan <hypolite@mrpetovan.com>
|
2018-11-12 03:08:33 +01:00
|
|
|
*/
|
|
|
|
class Photo
|
|
|
|
{
|
|
|
|
/**
|
|
|
|
* @var resource|false
|
|
|
|
*/
|
|
|
|
private $image;
|
|
|
|
/**
|
|
|
|
* @var int
|
|
|
|
*/
|
|
|
|
private $width;
|
|
|
|
/**
|
|
|
|
* @var int
|
|
|
|
*/
|
|
|
|
private $height;
|
|
|
|
|
|
|
|
public function __construct($data)
|
|
|
|
{
|
|
|
|
$this->image = @imagecreatefromstring($data);
|
|
|
|
if ($this->image !== FALSE) {
|
|
|
|
$this->width = imagesx($this->image);
|
|
|
|
$this->height = imagesy($this->image);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function __destruct()
|
|
|
|
{
|
|
|
|
if ($this->image) {
|
|
|
|
imagedestroy($this->image);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getWidth()
|
|
|
|
{
|
|
|
|
return $this->width;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getHeight()
|
|
|
|
{
|
|
|
|
return $this->height;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getImage()
|
|
|
|
{
|
|
|
|
return $this->image;
|
|
|
|
}
|
|
|
|
|
|
|
|
public function scaleImage($max)
|
|
|
|
{
|
|
|
|
$width = $this->width;
|
|
|
|
$height = $this->height;
|
|
|
|
|
|
|
|
$dest_width = $dest_height = 0;
|
|
|
|
|
|
|
|
if ((!$width) || (!$height)) {
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($width > $max && $height > $max) {
|
|
|
|
if ($width > $height) {
|
|
|
|
$dest_width = $max;
|
|
|
|
$dest_height = intval(($height * $max) / $width);
|
|
|
|
} else {
|
|
|
|
$dest_width = intval(($width * $max) / $height);
|
|
|
|
$dest_height = $max;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if ($width > $max) {
|
|
|
|
$dest_width = $max;
|
|
|
|
$dest_height = intval(($height * $max) / $width);
|
|
|
|
} else {
|
|
|
|
if ($height > $max) {
|
|
|
|
$dest_width = intval(($width * $max) / $height);
|
|
|
|
$dest_height = $max;
|
|
|
|
} else {
|
|
|
|
$dest_width = $width;
|
|
|
|
$dest_height = $height;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$dest = imagecreatetruecolor($dest_width, $dest_height);
|
|
|
|
if ($this->image) {
|
|
|
|
imagecopyresampled($dest, $this->image, 0, 0, 0, 0, $dest_width, $dest_height, $width, $height);
|
|
|
|
imagedestroy($this->image);
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->image = $dest;
|
|
|
|
$this->width = imagesx($this->image);
|
|
|
|
$this->height = imagesy($this->image);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function scaleImageUp($min)
|
|
|
|
{
|
|
|
|
$width = $this->width;
|
|
|
|
$height = $this->height;
|
|
|
|
|
|
|
|
$dest_width = $dest_height = 0;
|
|
|
|
|
|
|
|
if ((!$width) || (!$height)) {
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ($width < $min && $height < $min) {
|
|
|
|
if ($width > $height) {
|
|
|
|
$dest_width = $min;
|
|
|
|
$dest_height = intval(($height * $min) / $width);
|
|
|
|
} else {
|
|
|
|
$dest_width = intval(($width * $min) / $height);
|
|
|
|
$dest_height = $min;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if ($width < $min) {
|
|
|
|
$dest_width = $min;
|
|
|
|
$dest_height = intval(($height * $min) / $width);
|
|
|
|
} else {
|
|
|
|
if ($height < $min) {
|
|
|
|
$dest_width = intval(($width * $min) / $height);
|
|
|
|
$dest_height = $min;
|
|
|
|
} else {
|
|
|
|
$dest_width = $width;
|
|
|
|
$dest_height = $height;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
$dest = imagecreatetruecolor($dest_width, $dest_height);
|
|
|
|
if ($this->image) {
|
|
|
|
imagecopyresampled($dest, $this->image, 0, 0, 0, 0, $dest_width, $dest_height, $width, $height);
|
|
|
|
imagedestroy($this->image);
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->image = $dest;
|
|
|
|
$this->width = imagesx($this->image);
|
|
|
|
$this->height = imagesy($this->image);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function scaleImageSquare($dim)
|
|
|
|
{
|
|
|
|
$dest = imagecreatetruecolor($dim, $dim);
|
|
|
|
if ($this->image) {
|
|
|
|
imagecopyresampled($dest, $this->image, 0, 0, 0, 0, $dim, $dim, $this->width, $this->height);
|
|
|
|
imagedestroy($this->image);
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->image = $dest;
|
|
|
|
$this->width = imagesx($this->image);
|
|
|
|
$this->height = imagesy($this->image);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function cropImage($max, $x, $y, $w, $h)
|
|
|
|
{
|
|
|
|
$dest = imagecreatetruecolor($max, $max);
|
|
|
|
if ($this->image) {
|
|
|
|
imagecopyresampled($dest, $this->image, 0, 0, $x, $y, $max, $max, $w, $h);
|
|
|
|
imagedestroy($this->image);
|
|
|
|
}
|
|
|
|
|
|
|
|
$this->image = $dest;
|
|
|
|
$this->width = imagesx($this->image);
|
|
|
|
$this->height = imagesy($this->image);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function saveImage($path)
|
|
|
|
{
|
|
|
|
imagejpeg($this->image, $path, 100);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function imageString()
|
|
|
|
{
|
|
|
|
ob_start();
|
|
|
|
imagejpeg($this->image, NULL, 100);
|
|
|
|
$return = ob_get_clean();
|
|
|
|
return $return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|