This repository has been archived on 2024-12-02. You can view files and clone it, but cannot push or open issues or pull requests.
AbetoArmarios_Web/Source/gallery2/modules/gd/classes/GdFunctionality.class

550 lines
14 KiB
Plaintext

<?php
/*
* Gallery - a web based photo album viewer and editor
* Copyright (C) 2000-2007 Bharat Mediratta
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or (at
* your option) any later version.
*
* This program is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
*/
/**
* All image functions from the GD library are implemented here.
*
* Every call to these functions should go through this class. Errors are handled the Gallery-way
* (GalleryStatus) and it provides an easy way to test the Toolkit (by using an implementation with
* pseudo-functionality instead of this class).
*
* @package Gd
* @subpackage Classes
* @author Ernesto Baschny <ernst@baschny.de>
* @version $Revision: 15513 $
*/
class GdFunctionality {
/**
* @return array object GalleryStatus
* string phpinfo output
*/
function phpinfo($section=null) {
ob_start();
phpinfo($section);
$phpinfo = ob_get_contents();
ob_end_clean();
return array(null, $phpinfo);
}
/**
* The tempnam method from the GalleryPlatform we will need to overwrite in our testcases
* @return string
*/
function tempnam($tmpDir, $prefix) {
global $gallery;
$platform =& $gallery->getPlatform();
return $platform->tempnam($tmpDir, $prefix);
}
/**
* The copy method from GalleryPlatform, which we need to be able to overwrite in tests
* @return string
*/
function copy($src, $dest) {
global $gallery;
$platform =& $gallery->getPlatform();
return $platform->copy($src, $dest);
}
/**
* The unlink method from GalleryPlatform, which we need to be able to overwrite in tests
* @return string
*/
function unlink($file) {
global $gallery;
$platform =& $gallery->getPlatform();
return $platform->unlink($file);
}
/**
* The filesize method from GalleryPlatform, which we need to be able to overwrite in tests
* @return int
*/
function filesize($file) {
global $gallery;
$platform =& $gallery->getPlatform();
return $platform->filesize($file);
}
/**
* Set file permissions according to preferences
* @param string $file file path
* @return boolean true on success
*/
function chmod($file) {
global $gallery;
$platform =& $gallery->getPlatform();
return $platform->chmod($file);
}
/**
* Just check if a function exists or not.
* This is here so we can substitute the function-checker routine in our phpunit testcases.
*
* @return boolean true if exists
*/
function functionExists($fct) {
return function_exists($fct);
}
/**
* Return an integer representing the known imageTypes
* @return int
*/
function imageTypes() {
return imageTypes();
}
/**
* Return an array of information about the currently installed GD version
*
* Requires:
* - PHP 4 >= 4.3.0, PHP 5
*
* @return array object GalleryStatus
* array the output of gd_info
*/
function gd_info() {
if (!function_exists('gd_info')) {
return array(GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE), null);
}
$info = @gd_info();
return array(null, $info);
}
/**
* Return the size (width, height) of an image file.
* @return array (x, y)
*/
function getImageSize($filename) {
global $gallery;
$platform =& $gallery->getPlatform();
return $platform->getimagesize($filename);
}
/**
* Create a new palette based image with specified width and height
*
* Requires:
* - any PHP
*
* @return array object GalleryStatus
* res GD-resource
*/
function imageCreate($width, $height) {
$res = @imageCreate($width, $height);
if (!$res) {
return array(GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE | ERROR_UNSUPPORTED_OPERATION),
null);
}
return array(null, $res);
}
/**
* Create a new true color image with specified width and height
*
* Requires:
* - PHP 4 >= 4.0.6 or PHP 5
* - GD >= 2.0.1
*
* Danger: The imageCreateTruecolor() function is defined even if the
* GD library does not support it! If called in this situation, the call
* will generate a "Fatal error", which cannot be catched. So we have to
* make sure to call this method ONLY if we are sure to have GD >= 2.0.1
* (which at the current stage of this module will always be the case,
* since this is the minimal required version).
*
* @return array object GalleryStatus
* res GD-resource
*/
function imageCreateTruecolor($width, $height) {
if (!function_exists('imageCreateTruecolor')) {
return array(GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE | ERROR_UNSUPPORTED_OPERATION),
null);
}
$res = @imageCreateTruecolor($width, $height);
if (!$res) {
return array(GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE), null);
}
return array(null, $res);
}
/**
* Helper functionality to see if a filename is readable
* @return boolean
*/
function isValidFile($filename) {
global $gallery;
$platform =& $gallery->getPlatform();
if (!$platform->file_exists($filename)
|| !$platform->is_file($filename)
|| !$platform->is_readable($filename)) {
return false;
}
return true;
}
/**
* Check if a resource that is based on $filename is valid
*
* @return array object GalleryStatus
* resource GD resource
*/
function checkResource($res, $filename) {
if (!$res) {
if (!$this->isValidFile($filename)) {
return array(GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE | ERROR_PLATFORM_FAILURE),
null);
}
return array(GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE | ERROR_UNSUPPORTED_FILE_TYPE),
null);
}
return array(null, $res);
}
/**
* Create a new image from GIF file or URL.
*
* Requires
* - any PHP version
* - GD with GIF support
*
* @return array object GalleryStatus
* res GD-resource
*/
function imageCreateFromGif($filename) {
if (!function_exists('imageCreateFromGif')) {
return array(GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE | ERROR_UNSUPPORTED_OPERATION),
null);
}
$res = @imageCreateFromGif($filename);
list ($ret, $resource) = $this->checkResource($res, $filename);
if ($ret) {
return array($ret, null);
}
return array(null, $resource);
}
/**
* Create a new image from JPEG file or URL.
*
* Requires:
* - any PHP >= 3.0.16
* - GD >= 1.8 (for JPEG support)
*
* @return array object GalleryStatus
* res GD-resource
*/
function imageCreateFromJpeg($filename) {
$res = @imageCreateFromJpeg($filename);
return $this->checkResource($res, $filename);
}
/**
* Create a new image from PNG file or URL.
*
* Requires:
* - any PHP >= 3.0.13
* - GD (with PNG support)
*
* @return array object GalleryStatus
* res GD-resource
*/
function imageCreateFromPng($filename) {
$res = @imageCreateFromPng($filename);
return $this->checkResource($res, $filename);
}
/**
* Create a new image from WBMP (wap-bmp) file or URL.
*
* Requires:
* - PHP 4 >= 4.0.1 or PHP 5
* - GD >= 1.8 (for WBMP support)
*
* @return array object GalleryStatus
* res GD-resource
*/
function imageCreateFromWbmp($filename) {
$res = @imageCreateFromWbmp($filename);
return $this->checkResource($res, $filename);
}
/**
* Create a new image from XBM file or URL.
*
* Requires:
* - PHP 4 >= 4.0.1 or PHP 5
* - GD
*
* @return array object GalleryStatus
* res GD-resource
*/
function imageCreateFromXbm($filename) {
$res = @imageCreateFromXbm($filename);
return $this->checkResource($res, $filename);
}
/**
* Create a new image from XPM file or URL.
*
* Requires:
* - PHP 4 >= 4.0.1 or PHP 5
* - GD
*
* @return array object GalleryStatus
* res GD-resource
*/
function imageCreateFromXpm($filename) {
$res = @imageCreateFromXpm($filename);
return $this->checkResource($res, $filename);
}
/**
* Output GIF image to file.
*
* Requires:
* - any PHP
* - GD with GIF support
*
* @return object GalleryStatus
*/
function imageGif($res, $filename) {
if (!function_exists('imageGif')) {
return GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE | ERROR_UNSUPPORTED_OPERATION);
}
$result = @imageGif($res, $filename);
if ($result) {
return null;
} else {
return GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE);
}
}
/**
* Output JPEG image to file.
*
* Requires:
* - any PHP >= 3.0.16
* - GD >= 1.8
*
* @return object GalleryStatus
*/
function imageJpeg($res, $filename, $quality) {
if (!function_exists('imageJpeg')) {
return GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE | ERROR_UNSUPPORTED_OPERATION);
}
$result = @imageJpeg($res, $filename, $quality);
if ($result) {
return null;
} else {
return GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE);
}
}
/**
* Output PNG image to file.
*
* Requires:
* - any PHP 3>= 3.0.13
* - GD
*
* @return object GalleryStatus
*/
function imagePng($res, $filename) {
if (!function_exists('imagePng')) {
return GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE | ERROR_UNSUPPORTED_OPERATION);
}
$result = @imagePng($res, $filename);
if ($result) {
return null;
} else {
return GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE);
}
}
/**
* Output WBMP image to file.
*
* Requires:
* - PHP 3>= 3.0.15 or PHP 4 >= 4.0.1 or PHP 5
* - GD >= 1.8 (for WBMP support)
*
* @return object GalleryStatus
*/
function imageWbmp($res, $filename) {
if (!function_exists('imageWbmp')) {
return GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE | ERROR_UNSUPPORTED_OPERATION);
}
$result = @imageWbmp($res, $filename);
if ($result) {
return null;
} else {
return GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE);
}
}
/**
* Output XBM image to file.
*
* Requires:
* - PHP 5
*
* @return object GalleryStatus
*/
function imageXbm($res, $filename) {
if (!function_exists('imageXbm')) {
return GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE | ERROR_UNSUPPORTED_OPERATION);
}
$result = @imageXbm($res, $filename);
if ($result) {
return null;
} else {
return GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE);
}
}
/**
* Copy and resize part of an image with resampling
*
* Requires:
* - PHP 4 >= 4.0.6 or PHP 5
* - GD >= 2.0.1
*
* @return object GalleryStatus
*/
function imageCopyResampled(
$dstRes, $srcRes, $dstX, $dstY, $srcX, $srcY, $dstW, $dstH, $srcW, $srcH) {
if (!function_exists('imageCopyResampled')) {
return GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE | ERROR_UNSUPPORTED_OPERATION);
}
$result = @imageCopyResampled($dstRes, $srcRes, $dstX, $dstY, $srcX, $srcY,
$dstW, $dstH, $srcW, $srcH);
if ($result) {
return null;
} else {
return GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE);
}
}
/**
* Copy and resize part of an image
*
* Requires:
* - any PHP
*
* @return object GalleryStatus
*/
function imageCopyResized($dstRes, $srcRes, $dstX, $dstY, $srcX, $srcY,
$dstW, $dstH, $srcW, $srcH) {
$result = @imageCopyResized($dstRes, $srcRes, $dstX, $dstY, $srcX, $srcY,
$dstW, $dstH, $srcW, $srcH);
if ($result) {
return null;
} else {
return GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE);
}
}
/**
* Copy and merge part of an image
*
* Requires:
* - PHP 4 >= 4.0.1 or PHP 5
*
* @return object GalleryStatus
*/
function imageCopyMerge($dstRes, $srcRes, $dstX, $dstY, $srcX, $srcY, $srcW, $srcH, $pct) {
$result = @imageCopyMerge($dstRes, $srcRes, $dstX, $dstY, $srcX, $srcY, $srcW, $srcH, $pct);
if ($result) {
return null;
} else {
return GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE);
}
}
/**
* Copy part of an image
*
* Requires:
* - any PHP >= 3.0.6
*
* @return object GalleryStatus
*/
function imageCopy($dstRes, $srcRes, $dstX, $dstY, $srcX, $srcY, $srcW, $srcH) {
$result = @imageCopy($dstRes, $srcRes, $dstX, $dstY, $srcX, $srcY, $srcW, $srcH);
if ($result) {
return null;
} else {
return GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE);
}
}
/**
* Get image width
*
* @return int the width of the image
*/
function imageSx($res) {
return array(null, @imageSx($res));
}
/**
* Get image height
*
* @return int the height of the image
*/
function imageSy($res) {
return array(null, @imageSy($res));
}
/**
* Copy and merge part of an image
*
* Requires:
* - PHP 4 >= 4.3.0 or PHP 5
*
* @return array object GalleryStatus
* resource new gd resource
*/
function imageRotate($srcRes, $angle, $bgdColor) {
if (!function_exists('imageRotate')) {
return array(GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE | ERROR_UNSUPPORTED_OPERATION),
null);
}
$res = @imageRotate($srcRes, $angle, $bgdColor);
if ($res) {
return array(null, $res);
} else {
return array(GalleryCoreApi::error(ERROR_TOOLKIT_FAILURE), null);
}
}
/**
* Destroy an image
* @param object $res image resource
*/
function imagedestroy($res) {
@imagedestroy($res);
}
}
?>