mirror of
https://github.com/YunoHost-Apps/hubzilla_ynh.git
synced 2024-09-03 19:26:21 +02:00
157 lines
3.8 KiB
PHP
157 lines
3.8 KiB
PHP
<?php /** @file */
|
|
|
|
|
|
require_once('include/photo/photo_driver.php');
|
|
|
|
|
|
class photo_gd extends photo_driver {
|
|
|
|
function supportedTypes() {
|
|
$t = array();
|
|
$t['image/jpeg'] ='jpg';
|
|
if (imagetypes() & IMG_PNG) $t['image/png'] = 'png';
|
|
if (imagetypes() & IMG_GIF) $t['image/gif'] = 'gif';
|
|
return $t;
|
|
|
|
}
|
|
|
|
function load($data, $type) {
|
|
$this->valid = false;
|
|
if(! $data)
|
|
return;
|
|
|
|
$this->image = @imagecreatefromstring($data);
|
|
if($this->image !== FALSE) {
|
|
$this->valid = true;
|
|
$this->setDimensions();
|
|
imagealphablending($this->image, false);
|
|
imagesavealpha($this->image, true);
|
|
}
|
|
}
|
|
|
|
function setDimensions() {
|
|
$this->width = imagesx($this->image);
|
|
$this->height = imagesy($this->image);
|
|
}
|
|
|
|
|
|
public function destroy() {
|
|
if($this->is_valid()) {
|
|
imagedestroy($this->image);
|
|
}
|
|
}
|
|
|
|
public function getImage() {
|
|
if(!$this->is_valid())
|
|
return FALSE;
|
|
|
|
return $this->image;
|
|
}
|
|
|
|
public function doScaleImage($dest_width,$dest_height) {
|
|
|
|
$dest = imagecreatetruecolor( $dest_width, $dest_height );
|
|
$width = imagesx($this->image);
|
|
$height = imagesy($this->image);
|
|
|
|
imagealphablending($dest, false);
|
|
imagesavealpha($dest, true);
|
|
if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127)); // fill with alpha
|
|
imagecopyresampled($dest, $this->image, 0, 0, 0, 0, $dest_width, $dest_height, $width, $height);
|
|
if($this->image)
|
|
imagedestroy($this->image);
|
|
$this->image = $dest;
|
|
$this->setDimensions();
|
|
}
|
|
|
|
public function rotate($degrees) {
|
|
if(!$this->is_valid())
|
|
return FALSE;
|
|
|
|
$this->image = imagerotate($this->image,$degrees,0);
|
|
$this->setDimensions();
|
|
}
|
|
|
|
public function flip($horiz = true, $vert = false) {
|
|
if(!$this->is_valid())
|
|
return FALSE;
|
|
|
|
$w = imagesx($this->image);
|
|
$h = imagesy($this->image);
|
|
$flipped = imagecreate($w, $h);
|
|
if($horiz) {
|
|
for ($x = 0; $x < $w; $x++) {
|
|
imagecopy($flipped, $this->image, $x, 0, $w - $x - 1, 0, 1, $h);
|
|
}
|
|
}
|
|
if($vert) {
|
|
for ($y = 0; $y < $h; $y++) {
|
|
imagecopy($flipped, $this->image, 0, $y, 0, $h - $y - 1, $w, 1);
|
|
}
|
|
}
|
|
$this->image = $flipped;
|
|
$this->setDimensions(); // Shouldn't really be necessary
|
|
}
|
|
|
|
public function cropImage($max,$x,$y,$w,$h) {
|
|
if(!$this->is_valid())
|
|
return FALSE;
|
|
|
|
$dest = imagecreatetruecolor( $max, $max );
|
|
imagealphablending($dest, false);
|
|
imagesavealpha($dest, true);
|
|
if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127)); // fill with alpha
|
|
imagecopyresampled($dest, $this->image, 0, 0, $x, $y, $max, $max, $w, $h);
|
|
if($this->image)
|
|
imagedestroy($this->image);
|
|
$this->image = $dest;
|
|
$this->setDimensions();
|
|
}
|
|
|
|
public function cropImageRect($maxx,$maxy,$x,$y,$w,$h) {
|
|
if(!$this->is_valid())
|
|
return FALSE;
|
|
|
|
$dest = imagecreatetruecolor( $maxx, $maxy );
|
|
imagealphablending($dest, false);
|
|
imagesavealpha($dest, true);
|
|
if ($this->type=='image/png') imagefill($dest, 0, 0, imagecolorallocatealpha($dest, 0, 0, 0, 127)); // fill with alpha
|
|
imagecopyresampled($dest, $this->image, 0, 0, $x, $y, $maxx, $maxy, $w, $h);
|
|
if($this->image)
|
|
imagedestroy($this->image);
|
|
$this->image = $dest;
|
|
$this->setDimensions();
|
|
}
|
|
|
|
|
|
|
|
public function imageString() {
|
|
if(!$this->is_valid())
|
|
return FALSE;
|
|
|
|
$quality = FALSE;
|
|
|
|
ob_start();
|
|
|
|
switch($this->getType()){
|
|
case "image/png":
|
|
$quality = get_config('system','png_quality');
|
|
if((! $quality) || ($quality > 9))
|
|
$quality = PNG_QUALITY;
|
|
imagepng($this->image,NULL, $quality);
|
|
break;
|
|
case "image/jpeg":
|
|
default:
|
|
$quality = get_config('system','jpeg_quality');
|
|
if((! $quality) || ($quality > 100))
|
|
$quality = JPEG_QUALITY;
|
|
imagejpeg($this->image,NULL,$quality);
|
|
break;
|
|
}
|
|
$string = ob_get_contents();
|
|
ob_end_clean();
|
|
|
|
return $string;
|
|
}
|
|
|
|
}
|