<?php
/***************************************************************
-* Copyright notice
-*
-* (c) 1999-2010 Kasper Skårhøj (kasperYYYY@typo3.com)
-* All rights reserved
-*
-* This script is part of the TYPO3 project. The TYPO3 project 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.
-*
-* The GNU General Public License can be found at
-* http://www.gnu.org/copyleft/gpl.html.
-* A copy is found in the textfile GPL.txt and important notices to the license
-* from the author is found in LICENSE.txt distributed with these scripts.
-*
-*
-* This script 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.
-*
-* This copyright notice MUST APPEAR in all copies of the script!
-***************************************************************/
-/**
- * Standard graphical functions
- *
- * $Id$
- * Revised for TYPO3 3.6 July/2003 by Kasper Skårhøj
- *
- * @author Kasper Skårhøj <kasperYYYY@typo3.com>
- */
-/**
- * [CLASS/FUNCTION INDEX of SCRIPT]
- *
- *
+ * Copyright notice
*
- * 155: class t3lib_stdGraphic
- * 236: function init()
+ * (c) 1999-2011 Kasper Skårhøj (kasperYYYY@typo3.com)
+ * All rights reserved
*
- * SECTION: Layering images / "IMAGE" GIFBUILDER object
- * 366: function maskImageOntoImage(&$im,$conf,$workArea)
- * 436: function copyImageOntoImage(&$im,$conf,$workArea)
- * 458: function copyGifOntoGif(&$im,$cpImg,$conf,$workArea)
- * 537: function imagecopyresized(&$im, $cpImg, $Xstart, $Ystart, $cpImgCutX, $cpImgCutY, $w, $h, $w, $h)
+ * This script is part of the TYPO3 project. The TYPO3 project 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.
*
- * SECTION: Text / "TEXT" GIFBUILDER object
- * 587: function makeText(&$im,$conf,$workArea)
- * 707: function txtPosition($conf,$workArea,$BB)
- * 761: function calcBBox($conf)
- * 820: function addToMap($cords,$conf)
- * 843: function calcTextCordsForMap($cords,$offset, $conf)
- * 878: function SpacedImageTTFText(&$im, $fontSize, $angle, $x, $y, $Fcolor, $fontFile, $text, $spacing, $wordSpacing, $splitRenderingConf, $sF=1)
- * 915: function fontResize($conf)
- * 958: function ImageTTFBBoxWrapper($fontSize, $angle, $fontFile, $string, $splitRendering, $sF=1)
- * 1005: function ImageTTFTextWrapper($im, $fontSize, $angle, $x, $y, $color, $fontFile, $string, $splitRendering,$sF=1)
- * 1058: function splitString($string,$splitRendering,$fontSize,$fontFile)
- * 1208: function calcWordSpacing($conf, $scaleFactor=1)
- * 1227: function getTextScalFactor($conf)
+ * The GNU General Public License can be found at
+ * http://www.gnu.org/copyleft/gpl.html.
+ * A copy is found in the textfile GPL.txt and important notices to the license
+ * from the author is found in LICENSE.txt distributed with these scripts.
*
- * SECTION: Other GIFBUILDER objects related to TEXT
- * 1262: function makeOutline(&$im,$conf,$workArea,$txtConf)
- * 1291: function circleOffset($distance, $iterations)
- * 1315: function makeEmboss(&$im,$conf,$workArea,$txtConf)
- * 1337: function makeShadow(&$im,$conf,$workArea,$txtConf)
*
- * SECTION: Other GIFBUILDER objects
- * 1469: function makeBox(&$im,$conf,$workArea)
- * 1491: function makeEffect(&$im, $conf)
- * 1506: function IMparams($setup)
- * 1589: function adjust(&$im, $conf)
- * 1621: function crop(&$im,$conf)
- * 1652: function scale(&$im,$conf)
- * 1684: function setWorkArea($workArea)
+ * This script 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.
*
- * SECTION: Adjustment functions
- * 1725: function autolevels(&$im)
- * 1756: function outputLevels(&$im,$low,$high,$swap='')
- * 1788: function inputLevels(&$im,$low,$high,$swap='')
- * 1819: function reduceColors(&$im,$limit, $cols)
- * 1832: function IMreduceColors($file, $cols)
- *
- * SECTION: GIFBUILDER Helper functions
- * 1875: function prependAbsolutePath($fontFile)
- * 1889: function v5_sharpen($factor)
- * 1908: function v5_blur($factor)
- * 1925: function randomName()
- * 1938: function applyOffset($cords,$OFFSET)
- * 1951: function convertColor($string)
- * 2001: function recodeString($string)
- * 2023: function singleChars($theText,$returnUnicodeNumber=FALSE)
- * 2046: function objPosition($conf,$workArea,$BB)
- *
- * SECTION: Scaling, Dimensions of images
- * 2125: function imageMagickConvert($imagefile,$newExt='',$w='',$h='',$params='',$frame='',$options='',$mustCreate=0)
- * 2238: function getImageDimensions($imageFile)
- * 2266: function cacheImageDimensions($identifyResult)
- * 2298: function getCachedImageDimensions($imageFile)
- * 2332: function getImageScale($info,$w,$h,$options)
- * 2438: function file_exists_typo3temp_file($output,$orig='')
- *
- * SECTION: ImageMagick API functions
- * 2499: function imageMagickIdentify($imagefile)
- * 2534: function imageMagickExec($input,$output,$params)
- * 2557: function combineExec($input,$overlay,$mask,$output, $handleNegation = false)
- * 2588: function wrapFileName($inputName)
- *
- * SECTION: Various IO functions
- * 2629: function checkFile($file)
- * 2643: function createTempSubDir($dirName)
- * 2665: function applyImageMagickToPHPGif(&$im, $command)
- * 2691: function gif_or_jpg($type,$w,$h)
- * 2708: function output($file)
- * 2748: function destroy()
- * 2758: function imgTag ($imgInfo)
- * 2770: function ImageWrite($destImg, $theImage)
- * 2808: function imageGif($destImg, $theImage)
- * 2820: function imageCreateFromGif($sourceImg)
- * 2831: function imageCreateFromFile($sourceImg)
- * 2870: function imagecreate($w, $h)
- * 2885: function hexColor($col)
- * 2903: function unifyColors(&$img, $colArr, $closest = false)
+ * This copyright notice MUST APPEAR in all copies of the script!
+ ***************************************************************/
+/**
+ * Standard graphical functions
*
- * TOTAL FUNCTIONS: 66
- * (This index is automatically created/updated by the extension "extdeveval")
+ * Revised for TYPO3 3.6 July/2003 by Kasper Skårhøj
*
+ * @author Kasper Skårhøj <kasperYYYY@typo3.com>
*/
-
-
-
-
-
-
-
-
-
-
-
-
-
-
/**
* Class contains a bunch of cool functions for manipulating graphics with GDlib/Freetype and ImageMagick
* VERY OFTEN used with gifbuilder that extends this class and provides a TypoScript API to using these functions
* @subpackage t3lib
* @see tslib_gifBuilder
*/
-class t3lib_stdGraphic {
+class t3lib_stdGraphic {
// Internal configuration, set in init()
- var $combineScript = 'combine'; // The ImageMagick filename used for combining two images. This name changed during the versions.
- var $noFramePrepended=0; // If set, there is no frame pointer prepended to the filenames.
- var $GD2 = 1; // Set, if the GDlib used is version 2. @deprecated as of TYPO3 4.4, as this variables is now always set (GDlib2 always has this method, and PHP recommends to only use imagecreatetruecolor() over imagecreate())
- var $imagecopyresized_fix=0; // If set, imagecopyresized will not be called directly. For GD2 (some PHP installs?)
- var $gifExtension = 'gif'; // This should be changed to 'png' if you want this class to read/make PNG-files instead!
- var $gdlibExtensions = ''; // File formats supported by gdlib. This variable get's filled in "init" method
- var $truecolor = TRUE; // Internal variable which get's used to determine wheter GDlib should use function truecolor pendants, @deprecated as of TYPO3 4.4, as this variables is now always set (GDlib2 always has this method, and PHP recommends to only use imagecreatetruecolor() over imagecreate())
- var $png_truecolor = false; // Set to true if generated png's should be truecolor by default
- var $truecolorColors = 0xffffff; // 16777216 Colors is the maximum value for PNG, JPEG truecolor images (24-bit, 8-bit / Channel)
- var $TTFLocaleConv = ''; // Used to recode input to TTF-functions for other charsets. Deprecated since TYPO3 3.6, will be removed in TYPO3 4.6
- var $enable_typo3temp_db_tracking = 0; // If set, then all files in typo3temp will be logged in a database table. In addition to being a log of the files with original filenames, it also serves to secure that the same image is not rendered simultaneously by two different processes.
- var $imageFileExt = 'gif,jpg,jpeg,png,tif,bmp,tga,pcx,ai,pdf'; // Commalist of file extensions perceived as images by TYPO3. List should be set to 'gif,png,jpeg,jpg' if IM is not available. Lowercase and no spaces between!
- var $webImageExt = 'gif,jpg,jpeg,png'; // Commalist of web image extensions (can be shown by a webbrowser)
- var $maskNegate = ''; // Will be ' -negate' if ImageMagick ver 5.2+. See init();
+ var $combineScript = 'combine'; // The ImageMagick filename used for combining two images. This name changed during the versions.
+ var $noFramePrepended = 0; // If set, there is no frame pointer prepended to the filenames.
+ var $GD2 = 1; // Set, if the GDlib used is version 2. @deprecated as of TYPO3 4.4, as this variables is now always set (GDlib2 always has this method, and PHP recommends to only use imagecreatetruecolor() over imagecreate())
+ var $imagecopyresized_fix = 0; // If set, imagecopyresized will not be called directly. For GD2 (some PHP installs?)
+ var $gifExtension = 'gif'; // This should be changed to 'png' if you want this class to read/make PNG-files instead!
+ var $gdlibExtensions = ''; // File formats supported by gdlib. This variable get's filled in "init" method
+ var $png_truecolor = FALSE; // Set to TRUE if generated png's should be truecolor by default
+ var $truecolorColors = 0xffffff; // 16777216 Colors is the maximum value for PNG, JPEG truecolor images (24-bit, 8-bit / Channel)
+ var $enable_typo3temp_db_tracking = 0; // If set, then all files in typo3temp will be logged in a database table. In addition to being a log of the files with original filenames, it also serves to secure that the same image is not rendered simultaneously by two different processes.
+ var $imageFileExt = 'gif,jpg,jpeg,png,tif,bmp,tga,pcx,ai,pdf'; // Commalist of file extensions perceived as images by TYPO3. List should be set to 'gif,png,jpeg,jpg' if IM is not available. Lowercase and no spaces between!
+ var $webImageExt = 'gif,jpg,jpeg,png'; // Commalist of web image extensions (can be shown by a webbrowser)
+ var $maskNegate = ''; // Will be ' -negate' if ImageMagick ver 5.2+. See init();
var $NO_IM_EFFECTS = '';
var $cmds = array(
'jpg' => '',
);
var $NO_IMAGE_MAGICK = '';
var $V5_EFFECTS = 0;
- var $im_version_4 = 0;
var $mayScaleUp = 1;
// Variables for testing, alternative usage etc.
- var $filenamePrefix=''; // Filename prefix for images scaled in imageMagickConvert()
- var $imageMagickConvert_forceFileNameBody=''; // Forcing the output filename of imageMagickConvert() to this value. However after calling imageMagickConvert() it will be set blank again.
- var $dontCheckForExistingTempFile = 0; // This flag should always be false. If set true, imageMagickConvert will always write a new file to the tempdir! Used for debugging.
- var $dontCompress=0; // Prevents imageMagickConvert() from compressing the gif-files with t3lib_div::gif_compress()
- var $dontUnlinkTempFiles=0; // For debugging ONLY!
- var $alternativeOutputKey=''; // For debugging only. Filenames will not be based on mtime and only filename (not path) will be used. This key is also included in the hash of the filename...
+ var $filenamePrefix = ''; // Filename prefix for images scaled in imageMagickConvert()
+ var $imageMagickConvert_forceFileNameBody = ''; // Forcing the output filename of imageMagickConvert() to this value. However after calling imageMagickConvert() it will be set blank again.
+ var $dontCheckForExistingTempFile = 0; // This flag should always be FALSE. If set TRUE, imageMagickConvert will always write a new file to the tempdir! Used for debugging.
+ var $dontCompress = 0; // Prevents imageMagickConvert() from compressing the gif-files with t3lib_div::gif_compress()
+ var $dontUnlinkTempFiles = 0; // For debugging ONLY!
+ var $alternativeOutputKey = ''; // For debugging only. Filenames will not be based on mtime and only filename (not path) will be used. This key is also included in the hash of the filename...
// Internal:
- var $IM_commands = Array(); // All ImageMagick commands executed is stored in this array for tracking. Used by the Install Tools Image section
- var $workArea = Array();
+ var $IM_commands = array(); // All ImageMagick commands executed is stored in this array for tracking. Used by the Install Tools Image section
+ var $workArea = array();
// Constants:
- var $tempPath = 'typo3temp/'; // The temp-directory where to store the files. Normally relative to PATH_site but is allowed to be the absolute path AS LONG AS it is a subdir to PATH_site.
- var $absPrefix = ''; // Prefix for relative paths. Used in "show_item.php" script. Is prefixed the output file name IN imageMagickConvert()
- var $scalecmd = '-geometry'; // ImageMagick scaling command; "-geometry" eller "-sample". Used in makeText() and imageMagickConvert()
- var $im5fx_blurSteps='1x2,2x2,3x2,4x3,5x3,5x4,6x4,7x5,8x5,9x5'; // Used by v5_blur() to simulate 10 continuous steps of blurring
- var $im5fx_sharpenSteps='1x2,2x2,3x2,2x3,3x3,4x3,3x4,4x4,4x5,5x5'; // Used by v5_sharpen() to simulate 10 continuous steps of sharpening.
- var $pixelLimitGif = 10000; // This is the limit for the number of pixels in an image before it will be rendered as JPG instead of GIF/PNG
- var $colMap = Array ( // Array mapping HTML color names to RGB values.
- 'aqua' => Array(0,255,255),
- 'black' => Array(0,0,0),
- 'blue' => Array(0,0,255),
- 'fuchsia' => Array(255,0,255),
- 'gray' => Array(128,128,128),
- 'green' => Array(0,128,0),
- 'lime' => Array(0,255,0),
- 'maroon' => Array(128,0,0),
- 'navy' => Array(0,0,128),
- 'olive' => Array(128,128,0),
- 'purple' => Array(128,0,128),
- 'red' => Array(255,0,0),
- 'silver' => Array(192,192,192),
- 'teal' => Array(0,128,128),
- 'yellow' => Array(255,255,0),
- 'white' => Array(255,255,255)
+ var $tempPath = 'typo3temp/'; // The temp-directory where to store the files. Normally relative to PATH_site but is allowed to be the absolute path AS LONG AS it is a subdir to PATH_site.
+ var $absPrefix = ''; // Prefix for relative paths. Used in "show_item.php" script. Is prefixed the output file name IN imageMagickConvert()
+ var $scalecmd = '-geometry'; // ImageMagick scaling command; "-geometry" eller "-sample". Used in makeText() and imageMagickConvert()
+ var $im5fx_blurSteps = '1x2,2x2,3x2,4x3,5x3,5x4,6x4,7x5,8x5,9x5'; // Used by v5_blur() to simulate 10 continuous steps of blurring
+ var $im5fx_sharpenSteps = '1x2,2x2,3x2,2x3,3x3,4x3,3x4,4x4,4x5,5x5'; // Used by v5_sharpen() to simulate 10 continuous steps of sharpening.
+ var $pixelLimitGif = 10000; // This is the limit for the number of pixels in an image before it will be rendered as JPG instead of GIF/PNG
+ var $colMap = array( // Array mapping HTML color names to RGB values.
+ 'aqua' => array(0, 255, 255),
+ 'black' => array(0, 0, 0),
+ 'blue' => array(0, 0, 255),
+ 'fuchsia' => array(255, 0, 255),
+ 'gray' => array(128, 128, 128),
+ 'green' => array(0, 128, 0),
+ 'lime' => array(0, 255, 0),
+ 'maroon' => array(128, 0, 0),
+ 'navy' => array(0, 0, 128),
+ 'olive' => array(128, 128, 0),
+ 'purple' => array(128, 0, 128),
+ 'red' => array(255, 0, 0),
+ 'silver' => array(192, 192, 192),
+ 'teal' => array(0, 128, 128),
+ 'yellow' => array(255, 255, 0),
+ 'white' => array(255, 255, 255)
);
/**
* @var t3lib_cs
*/
var $csConvObj;
- var $nativeCharset=''; // Is set to the native character set of the input strings.
-
-
-
+ var $nativeCharset = ''; // Is set to the native character set of the input strings.
/**
*
* @return void
*/
- function init() {
+ function init() {
$gfxConf = $GLOBALS['TYPO3_CONF_VARS']['GFX'];
- if (function_exists('imagecreatefromjpeg')&&function_exists('imagejpeg')) {
+ if (function_exists('imagecreatefromjpeg') && function_exists('imagejpeg')) {
$this->gdlibExtensions .= ',jpg,jpeg';
}
- if (function_exists('imagecreatefrompng')&&function_exists('imagepng')) {
+ if (function_exists('imagecreatefrompng') && function_exists('imagepng')) {
$this->gdlibExtensions .= ',png';
}
- if (function_exists('imagecreatefromgif')&&function_exists('imagegif')) {
+ if (function_exists('imagecreatefromgif') && function_exists('imagegif')) {
$this->gdlibExtensions .= ',gif';
}
- if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['png_truecolor']) {
- $this->png_truecolor = true;
+ if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['png_truecolor']) {
+ $this->png_truecolor = TRUE;
}
- if (!$gfxConf['im_version_5']) {
- $this->im_version_4 = true;
+ if (!$gfxConf['im_version_5'] || $gfxConf['im_version_5'] === 'im4' || $gfxConf['im_version_5'] === 'im5') {
+ throw new RuntimeException(
+ 'Your TYPO3 installation is configured to use an old version of ImageMagick, which is not supported anymore. ' .
+ 'Please upgrade to ImageMagick version 6 or GraphicksMagick and set $TYPO3_CONF_VARS[\'GFX\'][\'im_version_5\'] appropriately.',
+ 1305059666
+ );
}
// When GIFBUILDER gets used in truecolor mode
}
// Setting default JPG parameters:
- $this->jpegQuality = t3lib_div::intInRange($gfxConf['jpg_quality'], 10, 100, 75);
- $this->cmds['jpg'] = $this->cmds['jpeg'] = '-colorspace RGB -sharpen 50 -quality '.$this->jpegQuality;
+ $this->jpegQuality = t3lib_utility_Math::forceIntegerInRange($gfxConf['jpg_quality'], 10, 100, 75);
+ $this->cmds['jpg'] = $this->cmds['jpeg'] = '-colorspace RGB -sharpen 50 -quality ' . $this->jpegQuality;
- if ($gfxConf['im_combine_filename']) $this->combineScript=$gfxConf['im_combine_filename'];
- if ($gfxConf['im_noFramePrepended']) $this->noFramePrepended=1;
+ if ($gfxConf['im_combine_filename']) {
+ $this->combineScript = $gfxConf['im_combine_filename'];
+ }
+ if ($gfxConf['im_noFramePrepended']) {
+ $this->noFramePrepended = 1;
+ }
// kept for backwards compatibility, can be turned on manually through localconf.php,
// but not through the installer anymore
$this->imagecopyresized_fix = ($gfxConf['gdlib_2'] === 'no_imagecopyresized_fix' ? 0 : 1);
- if ($gfxConf['gdlib_png']) {
- $this->gifExtension='png';
- }
- if ($gfxConf['TTFLocaleConv']) {
- $this->TTFLocaleConv = $gfxConf['TTFLocaleConv'];
+ if ($gfxConf['gdlib_png']) {
+ $this->gifExtension = 'png';
}
if ($gfxConf['enable_typo3temp_db_tracking']) {
$this->enable_typo3temp_db_tracking = $gfxConf['enable_typo3temp_db_tracking'];
$this->imageFileExt = $gfxConf['imagefile_ext'];
// This should be set if ImageMagick ver. 5+ is used.
- if ($gfxConf['im_negate_mask']) {
+ if ($gfxConf['im_negate_mask']) {
// Boolean. Indicates if the mask images should be inverted first.
- // This depends of the ImageMagick version. Below ver. 5.1 this should be false.
- // Above ImageMagick version 5.2+ it should be true.
+ // This depends of the ImageMagick version. Below ver. 5.1 this should be FALSE.
+ // Above ImageMagick version 5.2+ it should be TRUE.
// Just set the flag if the masks works opposite the intension!
$this->maskNegate = ' -negate';
}
- if ($gfxConf['im_no_effects']) {
+ if ($gfxConf['im_no_effects']) {
// Boolean. This is necessary if using ImageMagick 5+.
- // Approved version for using effects is version 4.2.9.
// Effects in Imagemagick 5+ tends to render very slowly!!
// - therefore must be disabled in order not to perform sharpen, blurring and such.
$this->NO_IM_EFFECTS = 1;
- $this->cmds['jpg'] = $this->cmds['jpeg'] = '-colorspace RGB -quality '.$this->jpegQuality;
+ $this->cmds['jpg'] = $this->cmds['jpeg'] = '-colorspace RGB -quality ' . $this->jpegQuality;
}
// ... but if 'im_v5effects' is set, don't care about 'im_no_effects'
- if ($gfxConf['im_v5effects']) {
+ if ($gfxConf['im_v5effects']) {
$this->NO_IM_EFFECTS = 0;
$this->V5_EFFECTS = 1;
- if ($gfxConf['im_v5effects']>0) {
- $this->cmds['jpg'] = $this->cmds['jpeg'] = '-colorspace RGB -quality '.intval($gfxConf['jpg_quality']).$this->v5_sharpen(10);
+ if ($gfxConf['im_v5effects'] > 0) {
+ $this->cmds['jpg'] = $this->cmds['jpeg'] = '-colorspace RGB -quality ' . intval($gfxConf['jpg_quality']) . $this->v5_sharpen(10);
}
}
- if (!$gfxConf['im']) {
+ if (!$gfxConf['im']) {
$this->NO_IMAGE_MAGICK = 1;
}
// Secures that images are not scaled up.
if ($gfxConf['im_noScaleUp']) {
- $this->mayScaleUp=0;
+ $this->mayScaleUp = 0;
}
- if (TYPO3_MODE=='FE') {
+ if (TYPO3_MODE == 'FE') {
$this->csConvObj = $GLOBALS['TSFE']->csConvObj;
- } elseif(is_object($GLOBALS['LANG'])) { // BE assumed:
+ } elseif (is_object($GLOBALS['LANG'])) { // BE assumed:
$this->csConvObj = $GLOBALS['LANG']->csConvObj;
- } else { // The object may not exist yet, so we need to create it now. Happens in the Install Tool for example.
+ } else { // The object may not exist yet, so we need to create it now. Happens in the Install Tool for example.
$this->csConvObj = t3lib_div::makeInstance('t3lib_cs');
}
$this->nativeCharset = $GLOBALS['TYPO3_CONF_VARS']['BE']['forceCharset'];
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
/*************************************************
*
* Layering images / "IMAGE" GIFBUILDER object
*************************************************/
/**
- * Implements the "IMAGE" GIFBUILDER object, when the "mask" property is true.
+ * Implements the "IMAGE" GIFBUILDER object, when the "mask" property is TRUE.
* It reads the two images defined by $conf['file'] and $conf['mask'] and copies the $conf['file'] onto the input image pointer image using the $conf['mask'] as a grayscale mask
* The operation involves ImageMagick for combining.
*
* @return void
* @see tslib_gifBuilder::make()
*/
- function maskImageOntoImage(&$im,$conf,$workArea) {
- if ($conf['file'] && $conf['mask']) {
+ function maskImageOntoImage(&$im, $conf, $workArea) {
+ if ($conf['file'] && $conf['mask']) {
$imgInf = pathinfo($conf['file']);
$imgExt = strtolower($imgInf['extension']);
- if (!t3lib_div::inList($this->gdlibExtensions, $imgExt)) {
- $BBimage = $this->imageMagickConvert($conf['file'],$this->gifExtension,'','','','','');
- } else {
+ if (!t3lib_div::inList($this->gdlibExtensions, $imgExt)) {
+ $BBimage = $this->imageMagickConvert($conf['file'], $this->gifExtension, '', '', '', '', '');
+ } else {
$BBimage = $this->getImageDimensions($conf['file']);
}
$maskInf = pathinfo($conf['mask']);
$maskExt = strtolower($maskInf['extension']);
- if (!t3lib_div::inList($this->gdlibExtensions, $maskExt)) {
- $BBmask = $this->imageMagickConvert($conf['mask'],$this->gifExtension,'','','','','');
- } else {
+ if (!t3lib_div::inList($this->gdlibExtensions, $maskExt)) {
+ $BBmask = $this->imageMagickConvert($conf['mask'], $this->gifExtension, '', '', '', '', '');
+ } else {
$BBmask = $this->getImageDimensions($conf['mask']);
}
- if ($BBimage && $BBmask) {
+ if ($BBimage && $BBmask) {
$w = imagesx($im);
$h = imagesy($im);
$tmpStr = $this->randomName();
- $theImage = $tmpStr.'_img.'.$this->gifExtension;
- $theDest = $tmpStr.'_dest.'.$this->gifExtension;
- $theMask = $tmpStr.'_mask.'.$this->gifExtension;
- // prepare overlay image
+ $theImage = $tmpStr . '_img.' . $this->gifExtension;
+ $theDest = $tmpStr . '_dest.' . $this->gifExtension;
+ $theMask = $tmpStr . '_mask.' . $this->gifExtension;
+ // prepare overlay image
$cpImg = $this->imageCreateFromFile($BBimage[3]);
$destImg = imagecreatetruecolor($w, $h);
- $Bcolor = ImageColorAllocate($destImg, 0,0,0);
+ $Bcolor = ImageColorAllocate($destImg, 0, 0, 0);
ImageFilledRectangle($destImg, 0, 0, $w, $h, $Bcolor);
- $this->copyGifOntoGif($destImg,$cpImg,$conf,$workArea);
+ $this->copyGifOntoGif($destImg, $cpImg, $conf, $workArea);
$this->ImageWrite($destImg, $theImage);
imageDestroy($cpImg);
imageDestroy($destImg);
- // prepare mask image
+ // prepare mask image
$cpImg = $this->imageCreateFromFile($BBmask[3]);
$destImg = imagecreatetruecolor($w, $h);
$Bcolor = ImageColorAllocate($destImg, 0, 0, 0);
ImageFilledRectangle($destImg, 0, 0, $w, $h, $Bcolor);
- $this->copyGifOntoGif($destImg,$cpImg,$conf,$workArea);
+ $this->copyGifOntoGif($destImg, $cpImg, $conf, $workArea);
$this->ImageWrite($destImg, $theMask);
imageDestroy($cpImg);
imageDestroy($destImg);
// mask the images
$this->ImageWrite($im, $theDest);
- $this->combineExec($theDest,$theImage,$theMask,$theDest, true); // Let combineExec handle maskNegation
+ $this->combineExec($theDest, $theImage, $theMask, $theDest, TRUE); // Let combineExec handle maskNegation
- $backIm = $this->imageCreateFromFile($theDest); // The main image is loaded again...
- if ($backIm) { // ... and if nothing went wrong we load it onto the old one.
- ImageColorTransparent($backIm,-1);
+ $backIm = $this->imageCreateFromFile($theDest); // The main image is loaded again...
+ if ($backIm) { // ... and if nothing went wrong we load it onto the old one.
+ ImageColorTransparent($backIm, -1);
$im = $backIm;
}
// unlink files from process
- if (!$this->dontUnlinkTempFiles) {
+ if (!$this->dontUnlinkTempFiles) {
unlink($theDest);
unlink($theImage);
unlink($theMask);
}
/**
- * Implements the "IMAGE" GIFBUILDER object, when the "mask" property is false (using only $conf['file'])
+ * Implements the "IMAGE" GIFBUILDER object, when the "mask" property is FALSE (using only $conf['file'])
*
* @param pointer GDlib image pointer
* @param array TypoScript array with configuration for the GIFBUILDER object.
* @return void
* @see tslib_gifBuilder::make(), maskImageOntoImage()
*/
- function copyImageOntoImage(&$im,$conf,$workArea) {
- if ($conf['file']) {
- if (!t3lib_div::inList($this->gdlibExtensions, $conf['BBOX'][2])) {
- $conf['BBOX']=$this->imageMagickConvert($conf['BBOX'][3],$this->gifExtension,'','','','','');
- $conf['file']=$conf['BBOX'][3];
+ function copyImageOntoImage(&$im, $conf, $workArea) {
+ if ($conf['file']) {
+ if (!t3lib_div::inList($this->gdlibExtensions, $conf['BBOX'][2])) {
+ $conf['BBOX'] = $this->imageMagickConvert($conf['BBOX'][3], $this->gifExtension, '', '', '', '', '');
+ $conf['file'] = $conf['BBOX'][3];
}
$cpImg = $this->imageCreateFromFile($conf['file']);
- $this->copyGifOntoGif($im,$cpImg,$conf,$workArea);
+ $this->copyGifOntoGif($im, $cpImg, $conf, $workArea);
imageDestroy($cpImg);
}
}
* @return void Works on the $im image pointer
* @access private
*/
- function copyGifOntoGif(&$im,$cpImg,$conf,$workArea) {
+ function copyGifOntoGif(&$im, $cpImg, $conf, $workArea) {
$cpW = imagesx($cpImg);
$cpH = imagesy($cpImg);
- $tile = t3lib_div::intExplode(',',$conf['tile']);
- $tile[0] = t3lib_div::intInRange($tile[0],1,20);
- $tile[1] = t3lib_div::intInRange($tile[1],1,20);
- $cpOff = $this->objPosition($conf,$workArea,Array($cpW*$tile[0],$cpH*$tile[1]));
-
- for ($xt=0;$xt<$tile[0];$xt++) {
- $Xstart=$cpOff[0]+$cpW*$xt;
- if ($Xstart+$cpW > $workArea[0]) { // if this image is inside of the workArea, then go on
+ $tile = t3lib_div::intExplode(',', $conf['tile']);
+ $tile[0] = t3lib_utility_Math::forceIntegerInRange($tile[0], 1, 20);
+ $tile[1] = t3lib_utility_Math::forceIntegerInRange($tile[1], 1, 20);
+ $cpOff = $this->objPosition($conf, $workArea, array($cpW * $tile[0], $cpH * $tile[1]));
+
+ for ($xt = 0; $xt < $tile[0]; $xt++) {
+ $Xstart = $cpOff[0] + $cpW * $xt;
+ if ($Xstart + $cpW > $workArea[0]) { // if this image is inside of the workArea, then go on
// X:
- if ($Xstart < $workArea[0]) {
- $cpImgCutX = $workArea[0]-$Xstart;
+ if ($Xstart < $workArea[0]) {
+ $cpImgCutX = $workArea[0] - $Xstart;
$Xstart = $workArea[0];
} else {
$cpImgCutX = 0;
}
- $w = $cpW-$cpImgCutX;
- if ($Xstart > $workArea[0]+$workArea[2]-$w) {
- $w = $workArea[0]+$workArea[2]-$Xstart;
+ $w = $cpW - $cpImgCutX;
+ if ($Xstart > $workArea[0] + $workArea[2] - $w) {
+ $w = $workArea[0] + $workArea[2] - $Xstart;
}
- if ($Xstart < $workArea[0]+$workArea[2]) { // if this image is inside of the workArea, then go on
+ if ($Xstart < $workArea[0] + $workArea[2]) { // if this image is inside of the workArea, then go on
// Y:
- for ($yt=0;$yt<$tile[1];$yt++) {
- $Ystart=$cpOff[1]+$cpH*$yt;
- if ($Ystart+$cpH > $workArea[1]) { // if this image is inside of the workArea, then go on
- if ($Ystart < $workArea[1]) {
- $cpImgCutY = $workArea[1]-$Ystart;
+ for ($yt = 0; $yt < $tile[1]; $yt++) {
+ $Ystart = $cpOff[1] + $cpH * $yt;
+ if ($Ystart + $cpH > $workArea[1]) { // if this image is inside of the workArea, then go on
+ if ($Ystart < $workArea[1]) {
+ $cpImgCutY = $workArea[1] - $Ystart;
$Ystart = $workArea[1];
} else {
$cpImgCutY = 0;
}
- $h = $cpH-$cpImgCutY;
- if ($Ystart > $workArea[1]+$workArea[3]-$h) {
- $h = $workArea[1]+$workArea[3]-$Ystart;
+ $h = $cpH - $cpImgCutY;
+ if ($Ystart > $workArea[1] + $workArea[3] - $h) {
+ $h = $workArea[1] + $workArea[3] - $Ystart;
}
- if ($Ystart < $workArea[1]+$workArea[3]) { // if this image is inside of the workArea, then go on
+ if ($Ystart < $workArea[1] + $workArea[3]) { // if this image is inside of the workArea, then go on
$this->imagecopyresized($im, $cpImg, $Xstart, $Ystart, $cpImgCutX, $cpImgCutY, $w, $h, $w, $h);
}
}
- } // Y:
+ } // Y:
}
}
}
* With GD2 only the palette of the dest-image is used which mostly results in totally black images when trying to
* copy a color-ful image onto the destination.
* The GD2-fix is to
- * 1) Create a blank TRUE-COLOR image
- * 2) Copy the destination image onto that one
- * 3) Then do the actual operation; Copying the source (top image) onto that
- * 4) ... and return the result pointer.
- * 5) Reduce colors (if we do not, the result may become strange!)
+ * 1) Create a blank TRUE-COLOR image
+ * 2) Copy the destination image onto that one
+ * 3) Then do the actual operation; Copying the source (top image) onto that
+ * 4) ... and return the result pointer.
+ * 5) Reduce colors (if we do not, the result may become strange!)
* It works, but the resulting images is now a true-color PNG which may be very large.
* So, why not use 'imagetruecolortopalette ($im, TRUE, 256)' - well because it does NOT WORK! So simple is that.
*
* @access private
* @see t3lib_iconWorks::imagecopyresized()
*/
- function imagecopyresized(&$im, $cpImg, $Xstart, $Ystart, $cpImgCutX, $cpImgCutY, $w, $h, $w, $h) {
- if ($this->imagecopyresized_fix) {
- $im_base = imagecreatetruecolor(imagesx($im), imagesy($im)); // Make true color image
- imagecopyresized($im_base, $im, 0,0,0,0, imagesx($im),imagesy($im),imagesx($im),imagesy($im)); // Copy the source image onto that
- imagecopyresized($im_base, $cpImg, $Xstart, $Ystart, $cpImgCutX, $cpImgCutY, $w, $h, $w, $h); // Then copy the $cpImg onto that (the actual operation!)
- $im = $im_base; // Set pointer
- if (!$this->truecolor) {
- $this->makeEffect($im, Array('value'=>'colors='.t3lib_div::intInRange($this->setup['reduceColors'], 256, $this->truecolorColors, 256))); // Reduce to "reduceColors" colors - make SURE that IM is working then!
- }
+ function imagecopyresized(&$im, $cpImg, $Xstart, $Ystart, $cpImgCutX, $cpImgCutY, $w, $h, $w, $h) {
+ if ($this->imagecopyresized_fix) {
+ $im_base = imagecreatetruecolor(imagesx($im), imagesy($im)); // Make true color image
+ imagecopyresized($im_base, $im, 0, 0, 0, 0, imagesx($im), imagesy($im), imagesx($im), imagesy($im)); // Copy the source image onto that
+ imagecopyresized($im_base, $cpImg, $Xstart, $Ystart, $cpImgCutX, $cpImgCutY, $w, $h, $w, $h); // Then copy the $cpImg onto that (the actual operation!)
+ $im = $im_base; // Set pointer
} else {
imagecopyresized($im, $cpImg, $Xstart, $Ystart, $cpImgCutX, $cpImgCutY, $w, $h, $w, $h);
}
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
/********************************
*
* Text / "TEXT" GIFBUILDER object
* @return void
* @see tslib_gifBuilder::make()
*/
- function makeText(&$im,$conf,$workArea) {
+ function makeText(&$im, $conf, $workArea) {
// Spacing
- list($spacing,$wordSpacing) = $this->calcWordSpacing($conf);
+ list($spacing, $wordSpacing) = $this->calcWordSpacing($conf);
// Position
- $txtPos = $this->txtPosition($conf,$workArea,$conf['BBOX']);
+ $txtPos = $this->txtPosition($conf, $workArea, $conf['BBOX']);
$theText = $this->recodeString($conf['text']);
- if ($conf['imgMap'] && is_array($conf['imgMap.'])) {
- $this->addToMap($this->calcTextCordsForMap($conf['BBOX'][2],$txtPos, $conf['imgMap.']), $conf['imgMap.']);
+ if ($conf['imgMap'] && is_array($conf['imgMap.'])) {
+ $this->addToMap($this->calcTextCordsForMap($conf['BBOX'][2], $txtPos, $conf['imgMap.']), $conf['imgMap.']);
}
- if (!$conf['hideButCreateMap']) {
+ if (!$conf['hideButCreateMap']) {
// Font Color:
- $cols=$this->convertColor($conf['fontColor']);
+ $cols = $this->convertColor($conf['fontColor']);
// NiceText is calculated
if (!$conf['niceText']) {
- // Font Color is reserved:
- if (!$this->truecolor) {
- $reduce = t3lib_div::intInRange($this->setup['reduceColors'], 256, $this->truecolorColors, 256);
- $this->reduceColors($im, $reduce-49, $reduce-50); // If "reduce-49" colors (or more) are used reduce them to "reduce-50"
- }
- $Fcolor = ImageColorAllocate($im, $cols[0],$cols[1],$cols[2]);
+ $Fcolor = ImageColorAllocate($im, $cols[0], $cols[1], $cols[2]);
// antiAliasing is setup:
$Fcolor = ($conf['antiAlias']) ? $Fcolor : -$Fcolor;
- for ($a=0; $a<$conf['iterations']; $a++) {
- if ($spacing || $wordSpacing) { // If any kind of spacing applys, we use this function:
+ for ($a = 0; $a < $conf['iterations']; $a++) {
+ if ($spacing || $wordSpacing) { // If any kind of spacing applys, we use this function:
$this->SpacedImageTTFText($im, $conf['fontSize'], $conf['angle'], $txtPos[0], $txtPos[1], $Fcolor, t3lib_stdGraphic::prependAbsolutePath($conf['fontFile']), $theText, $spacing, $wordSpacing, $conf['splitRendering.']);
} else {
$this->renderTTFText($im, $conf['fontSize'], $conf['angle'], $txtPos[0], $txtPos[1], $Fcolor, $conf['fontFile'], $theText, $conf['splitRendering.'], $conf);
}
}
- } else { // NICETEXT::
+ } else { // NICETEXT::
// options anti_aliased and iterations is NOT available when doing this!!
$w = imagesx($im);
$h = imagesy($im);
$tmpStr = $this->randomName();
- $fileMenu = $tmpStr.'_menuNT.'.$this->gifExtension;
- $fileColor = $tmpStr.'_colorNT.'.$this->gifExtension;
- $fileMask = $tmpStr.'_maskNT.'.$this->gifExtension;
+ $fileMenu = $tmpStr . '_menuNT.' . $this->gifExtension;
+ $fileColor = $tmpStr . '_colorNT.' . $this->gifExtension;
+ $fileMask = $tmpStr . '_maskNT.' . $this->gifExtension;
// Scalefactor
- $sF = t3lib_div::intInRange($conf['niceText.']['scaleFactor'],2,5);
- $newW = ceil($sF*imagesx($im));
- $newH = ceil($sF*imagesy($im));
+ $sF = t3lib_utility_Math::forceIntegerInRange($conf['niceText.']['scaleFactor'], 2, 5);
+ $newW = ceil($sF * imagesx($im));
+ $newH = ceil($sF * imagesy($im));
// Make mask
$maskImg = imagecreatetruecolor($newW, $newH);
- $Bcolor = ImageColorAllocate($maskImg, 255,255,255);
+ $Bcolor = ImageColorAllocate($maskImg, 255, 255, 255);
ImageFilledRectangle($maskImg, 0, 0, $newW, $newH, $Bcolor);
- $Fcolor = ImageColorAllocate($maskImg, 0,0,0);
- if ($spacing || $wordSpacing) { // If any kind of spacing applys, we use this function:
- $this->SpacedImageTTFText($maskImg, $conf['fontSize'], $conf['angle'], $txtPos[0], $txtPos[1], $Fcolor, t3lib_stdGraphic::prependAbsolutePath($conf['fontFile']), $theText, $spacing, $wordSpacing, $conf['splitRendering.'],$sF);
+ $Fcolor = ImageColorAllocate($maskImg, 0, 0, 0);
+ if ($spacing || $wordSpacing) { // If any kind of spacing applys, we use this function:
+ $this->SpacedImageTTFText($maskImg, $conf['fontSize'], $conf['angle'], $txtPos[0], $txtPos[1], $Fcolor, t3lib_stdGraphic::prependAbsolutePath($conf['fontFile']), $theText, $spacing, $wordSpacing, $conf['splitRendering.'], $sF);
} else {
$this->renderTTFText($maskImg, $conf['fontSize'], $conf['angle'], $txtPos[0], $txtPos[1], $Fcolor, $conf['fontFile'], $theText, $conf['splitRendering.'], $conf, $sF);
}
ImageDestroy($maskImg);
// Downscales the mask
- if ($this->NO_IM_EFFECTS) {
- if ($this->maskNegate) {
- $command = trim($this->scalecmd.' '.$w.'x'.$h.'!'); // Negate 2 times makes no negate...
+ if ($this->NO_IM_EFFECTS) {
+ if ($this->maskNegate) {
+ $command = trim($this->scalecmd . ' ' . $w . 'x' . $h . '!'); // Negate 2 times makes no negate...
} else {
- $command = trim($this->scalecmd.' '.$w.'x'.$h.'! -negate');
+ $command = trim($this->scalecmd . ' ' . $w . 'x' . $h . '! -negate');
}
} else {
- if ($this->maskNegate) {
- $command = trim($conf['niceText.']['before'].' '.$this->scalecmd.' '.$w.'x'.$h.'! '.$conf['niceText.']['after']);
+ if ($this->maskNegate) {
+ $command = trim($conf['niceText.']['before'] . ' ' . $this->scalecmd . ' ' . $w . 'x' . $h . '! ' . $conf['niceText.']['after']);
} else {
- $command = trim($conf['niceText.']['before'].' '.$this->scalecmd.' '.$w.'x'.$h.'! '.$conf['niceText.']['after'].' -negate');
+ $command = trim($conf['niceText.']['before'] . ' ' . $this->scalecmd . ' ' . $w . 'x' . $h . '! ' . $conf['niceText.']['after'] . ' -negate');
}
if ($conf['niceText.']['sharpen']) {
- if ($this->V5_EFFECTS) {
- $command.=$this->v5_sharpen($conf['niceText.']['sharpen']);
+ if ($this->V5_EFFECTS) {
+ $command .= $this->v5_sharpen($conf['niceText.']['sharpen']);
} else {
- $command.=' -sharpen '.t3lib_div::intInRange($conf['niceText.']['sharpen'],1,99);
+ $command .= ' -sharpen ' . t3lib_utility_Math::forceIntegerInRange($conf['niceText.']['sharpen'], 1, 99);
}
}
}
- $this->imageMagickExec($fileMask,$fileMask,$command);
+ $this->imageMagickExec($fileMask, $fileMask, $command);
// Make the color-file
$colorImg = imagecreatetruecolor($w, $h);
- $Ccolor = ImageColorAllocate($colorImg, $cols[0],$cols[1],$cols[2]);
+ $Ccolor = ImageColorAllocate($colorImg, $cols[0], $cols[1], $cols[2]);
ImageFilledRectangle($colorImg, 0, 0, $w, $h, $Ccolor);
$this->ImageWrite($colorImg, $fileColor);
ImageDestroy($colorImg);
// The mask is applied
- $this->ImageWrite($im, $fileMenu); // The main pictures is saved temporarily
+ $this->ImageWrite($im, $fileMenu); // The main pictures is saved temporarily
- $this->combineExec($fileMenu,$fileColor,$fileMask, $fileMenu);
+ $this->combineExec($fileMenu, $fileColor, $fileMask, $fileMenu);
- $backIm = $this->imageCreateFromFile($fileMenu); // The main image is loaded again...
- if ($backIm) { // ... and if nothing went wrong we load it onto the old one.
- ImageColorTransparent($backIm,-1);
+ $backIm = $this->imageCreateFromFile($fileMenu); // The main image is loaded again...
+ if ($backIm) { // ... and if nothing went wrong we load it onto the old one.
+ ImageColorTransparent($backIm, -1);
$im = $backIm;
}
// Deleting temporary files;
- if (!$this->dontUnlinkTempFiles) {
+ if (!$this->dontUnlinkTempFiles) {
unlink($fileMenu);
unlink($fileColor);
unlink($fileMask);
* @access private
* @see makeText()
*/
- function txtPosition($conf,$workArea,$BB) {
+ function txtPosition($conf, $workArea, $BB) {
$bbox = $BB[2];
- $angle=intval($conf['angle'])/180*pi();
- $conf['angle']=0;
+ $angle = intval($conf['angle']) / 180 * pi();
+ $conf['angle'] = 0;
$straightBB = $this->calcBBox($conf);
// offset, align, valign, workarea
- $result=Array(); // [0]=x, [1]=y, [2]=w, [3]=h
+ $result = array(); // [0]=x, [1]=y, [2]=w, [3]=h
$result[2] = $BB[0];
$result[3] = $BB[1];
- $w=$workArea[2];
- $h=$workArea[3];
+ $w = $workArea[2];
+ $h = $workArea[3];
- switch($conf['align']) {
+ switch ($conf['align']) {
case 'right':
case 'center':
- $factor=abs(cos($angle));
- $sign=(cos($angle)<0)?-1:1;
- $len1 = $sign*$factor*$straightBB[0];
- $len2= $sign*$BB[0];
- $result[0] = $w-ceil($len2*$factor+(1-$factor)*$len1);
-
- $factor=abs(sin($angle));
- $sign=(sin($angle)<0)?-1:1;
- $len1= $sign*$factor*$straightBB[0];
- $len2= $sign*$BB[1];
- $result[1]=ceil($len2*$factor+(1-$factor)*$len1);
+ $factor = abs(cos($angle));
+ $sign = (cos($angle) < 0) ? -1 : 1;
+ $len1 = $sign * $factor * $straightBB[0];
+ $len2 = $sign * $BB[0];
+ $result[0] = $w - ceil($len2 * $factor + (1 - $factor) * $len1);
+
+ $factor = abs(sin($angle));
+ $sign = (sin($angle) < 0) ? -1 : 1;
+ $len1 = $sign * $factor * $straightBB[0];
+ $len2 = $sign * $BB[1];
+ $result[1] = ceil($len2 * $factor + (1 - $factor) * $len1);
break;
}
- switch($conf['align']) {
+ switch ($conf['align']) {
case 'right':
break;
case 'center':
- $result[0] = round(($result[0])/2);
- $result[1] = round(($result[1])/2);
+ $result[0] = round(($result[0]) / 2);
+ $result[1] = round(($result[1]) / 2);
break;
default:
- $result[0]=0;
- $result[1]=0;
+ $result[0] = 0;
+ $result[1] = 0;
break;
}
- $result = $this->applyOffset($result,t3lib_div::intExplode(',',$conf['offset']));
- $result = $this->applyOffset($result,$workArea);
+ $result = $this->applyOffset($result, t3lib_div::intExplode(',', $conf['offset']));
+ $result = $this->applyOffset($result, $workArea);
return $result;
}
* @access private
* @see txtPosition(), tslib_gifBuilder::start()
*/
- function calcBBox($conf) {
+ function calcBBox($conf) {
$sF = $this->getTextScalFactor($conf);
- list($spacing,$wordSpacing) = $this->calcWordSpacing($conf, $sF);
+ list($spacing, $wordSpacing) = $this->calcWordSpacing($conf, $sF);
$theText = $this->recodeString($conf['text']);
- $charInf = $this->ImageTTFBBoxWrapper($conf['fontSize'], $conf['angle'], $conf['fontFile'], $theText, $conf['splitRendering.'],$sF);
+ $charInf = $this->ImageTTFBBoxWrapper($conf['fontSize'], $conf['angle'], $conf['fontFile'], $theText, $conf['splitRendering.'], $sF);
$theBBoxInfo = $charInf;
- if ($conf['angle']) {
- $xArr = Array($charInf[0],$charInf[2],$charInf[4],$charInf[6]);
- $yArr = Array($charInf[1],$charInf[3],$charInf[5],$charInf[7]);
- $x=max($xArr)-min($xArr);
- $y=max($yArr)-min($yArr);
+ if ($conf['angle']) {
+ $xArr = array($charInf[0], $charInf[2], $charInf[4], $charInf[6]);
+ $yArr = array($charInf[1], $charInf[3], $charInf[5], $charInf[7]);
+ $x = max($xArr) - min($xArr);
+ $y = max($yArr) - min($yArr);
} else {
- $x = ($charInf[2]-$charInf[0]);
- $y = ($charInf[1]-$charInf[7]);
+ $x = ($charInf[2] - $charInf[0]);
+ $y = ($charInf[1] - $charInf[7]);
}
// Set original lineHeight (used by line breaks):
$theBBoxInfo['lineHeight'] = $y;
- if ($spacing || $wordSpacing) { // If any kind of spacing applys, we use this function:
- $x=0;
- if (!$spacing && $wordSpacing) {
- $bits = explode(' ',$theText);
+ if ($spacing || $wordSpacing) { // If any kind of spacing applys, we use this function:
+ $x = 0;
+ if (!$spacing && $wordSpacing) {
+ $bits = explode(' ', $theText);
foreach ($bits as $word) {
- $word.=' ';
- $wordInf = $this->ImageTTFBBoxWrapper($conf['fontSize'], $conf['angle'], $conf['fontFile'], $word, $conf['splitRendering.'],$sF);
- $wordW = ($wordInf[2]-$wordInf[0]);
- $x+=$wordW+$wordSpacing;
+ $word .= ' ';
+ $wordInf = $this->ImageTTFBBoxWrapper($conf['fontSize'], $conf['angle'], $conf['fontFile'], $word, $conf['splitRendering.'], $sF);
+ $wordW = ($wordInf[2] - $wordInf[0]);
+ $x += $wordW + $wordSpacing;
}
} else {
$utf8Chars = $this->singleChars($theText);
// For each UTF-8 char, do:
- foreach($utf8Chars as $char) {
- $charInf = $this->ImageTTFBBoxWrapper($conf['fontSize'], $conf['angle'], $conf['fontFile'], $char, $conf['splitRendering.'],$sF);
- $charW = ($charInf[2]-$charInf[0]);
- $x+=$charW+(($char==' ')?$wordSpacing:$spacing);
+ foreach ($utf8Chars as $char) {
+ $charInf = $this->ImageTTFBBoxWrapper($conf['fontSize'], $conf['angle'], $conf['fontFile'], $char, $conf['splitRendering.'], $sF);
+ $charW = ($charInf[2] - $charInf[0]);
+ $x += $charW + (($char == ' ') ? $wordSpacing : $spacing);
}
}
} elseif (isset($conf['breakWidth']) && $conf['breakWidth'] && $this->getRenderedTextWidth($conf['text'], $conf) > $conf['breakWidth']) {
foreach ($wordPairs as $index => $wordPair) {
$wordWidth = $this->getRenderedTextWidth($wordPair, $conf);
if ($index == 0 || $currentWidth + $wordWidth <= $breakWidth) {
- $currentWidth+= $wordWidth;
+ $currentWidth += $wordWidth;
} else {
$maxWidth = max($maxWidth, $currentWidth);
- $y+= $breakSpace;
+ $y += $breakSpace;
// Restart:
$currentWidth = $wordWidth;
}
if ($sF > 1) {
$x = ceil($x / $sF);
$y = ceil($y / $sF);
- if (is_array($theBBoxInfo)) {
+ if (is_array($theBBoxInfo)) {
foreach ($theBBoxInfo as &$value) {
$value = ceil($value / $sF);
}
+ unset($value);
}
}
return array($x, $y, $theBBoxInfo);
* @access private
* @see makeText(), calcTextCordsForMap()
*/
- function addToMap($cords,$conf) {
+ function addToMap($cords, $conf) {
$JS = $conf['noBlur'] ? '' : ' onfocus="blurLink(this);"';
- $this->map.='<area'.
- ' shape="poly"'.
- ' coords="'.implode(',',$cords).'"'.
- ' href="'.htmlspecialchars($conf['url']).'"'.
- ($conf['target'] ? ' target="'.htmlspecialchars($conf['target']).'"' : '').
- $JS.
- (strlen($conf['titleText']) ? ' title="'.htmlspecialchars($conf['titleText']).'"' : '').
- ' alt="'.htmlspecialchars($conf['altText']).'" />';
+ $this->map .= '<area' .
+ ' shape="poly"' .
+ ' coords="' . implode(',', $cords) . '"' .
+ ' href="' . htmlspecialchars($conf['url']) . '"' .
+ ($conf['target'] ? ' target="' . htmlspecialchars($conf['target']) . '"' : '') .
+ $JS .
+ (strlen($conf['titleText']) ? ' title="' . htmlspecialchars($conf['titleText']) . '"' : '') .
+ ' alt="' . htmlspecialchars($conf['altText']) . '" />';
}
/**
* @access private
* @see makeText(), calcTextCordsForMap()
*/
- function calcTextCordsForMap($cords,$offset, $conf) {
- $pars = t3lib_div::intExplode(',',$conf['explode'].',');
+ function calcTextCordsForMap($cords, $offset, $conf) {
+ $pars = t3lib_div::intExplode(',', $conf['explode'] . ',');
- $newCords[0] = $cords[0]+$offset[0]-$pars[0];
- $newCords[1] = $cords[1]+$offset[1]+$pars[1];
- $newCords[2] = $cords[2]+$offset[0]+$pars[0];
- $newCords[3] = $cords[3]+$offset[1]+$pars[1];
- $newCords[4] = $cords[4]+$offset[0]+$pars[0];
- $newCords[5] = $cords[5]+$offset[1]-$pars[1];
- $newCords[6] = $cords[6]+$offset[0]-$pars[0];
- $newCords[7] = $cords[7]+$offset[1]-$pars[1];
+ $newCords[0] = $cords[0] + $offset[0] - $pars[0];
+ $newCords[1] = $cords[1] + $offset[1] + $pars[1];
+ $newCords[2] = $cords[2] + $offset[0] + $pars[0];
+ $newCords[3] = $cords[3] + $offset[1] + $pars[1];
+ $newCords[4] = $cords[4] + $offset[0] + $pars[0];
+ $newCords[5] = $cords[5] + $offset[1] - $pars[1];
+ $newCords[6] = $cords[6] + $offset[0] - $pars[0];
+ $newCords[7] = $cords[7] + $offset[1] - $pars[1];
return $newCords;
}
* @return void
* @access private
*/
- function SpacedImageTTFText(&$im, $fontSize, $angle, $x, $y, $Fcolor, $fontFile, $text, $spacing, $wordSpacing, $splitRenderingConf, $sF=1) {
+ function SpacedImageTTFText(&$im, $fontSize, $angle, $x, $y, $Fcolor, $fontFile, $text, $spacing, $wordSpacing, $splitRenderingConf, $sF = 1) {
- $spacing*=$sF;
- $wordSpacing*=$sF;
+ $spacing *= $sF;
+ $wordSpacing *= $sF;
- if (!$spacing && $wordSpacing) {
- $bits = explode(' ',$text);
+ if (!$spacing && $wordSpacing) {
+ $bits = explode(' ', $text);
foreach ($bits as $word) {
- $word.=' ';
- $word = $word;
- $wordInf = $this->ImageTTFBBoxWrapper($fontSize, $angle, $fontFile, $word, $splitRenderingConf ,$sF);
- $wordW = ($wordInf[2]-$wordInf[0]);
+ $word .= ' ';
+ $wordInf = $this->ImageTTFBBoxWrapper($fontSize, $angle, $fontFile, $word, $splitRenderingConf, $sF);
+ $wordW = ($wordInf[2] - $wordInf[0]);
$this->ImageTTFTextWrapper($im, $fontSize, $angle, $x, $y, $Fcolor, $fontFile, $word, $splitRenderingConf, $sF);
- $x+=$wordW+$wordSpacing;
+ $x += $wordW + $wordSpacing;
}
} else {
$utf8Chars = $this->singleChars($text);
// For each UTF-8 char, do:
- foreach($utf8Chars as $char) {
+ foreach ($utf8Chars as $char) {
$charInf = $this->ImageTTFBBoxWrapper($fontSize, $angle, $fontFile, $char, $splitRenderingConf, $sF);
- $charW = ($charInf[2]-$charInf[0]);
+ $charW = ($charInf[2] - $charInf[0]);
$this->ImageTTFTextWrapper($im, $fontSize, $angle, $x, $y, $Fcolor, $fontFile, $char, $splitRenderingConf, $sF);
- $x+=$charW+(($char==' ')?$wordSpacing:$spacing);
+ $x += $charW + (($char == ' ') ? $wordSpacing : $spacing);
}
}
}
* @see tslib_gifBuilder::start()
*/
function fontResize($conf) {
- // you have to use +calc options like [10.h] in 'offset' to get the right position of your text-image, if you use +calc in XY height!!!!
+ // you have to use +calc options like [10.h] in 'offset' to get the right position of your text-image, if you use +calc in XY height!!!!
$maxWidth = intval($conf['maxWidth']);
- list($spacing,$wordSpacing) = $this->calcWordSpacing($conf);
- if ($maxWidth) {
- if ($spacing || $wordSpacing) { // If any kind of spacing applys, we use this function:
+ list($spacing, $wordSpacing) = $this->calcWordSpacing($conf);
+ if ($maxWidth) {
+ if ($spacing || $wordSpacing) { // If any kind of spacing applys, we use this function:
return $conf['fontSize'];
- // ################ no calc for spacing yet !!!!!!
+ // ################ no calc for spacing yet !!!!!!
} else {
do {
// determine bounding box.
$bounds = $this->ImageTTFBBoxWrapper($conf['fontSize'], $conf['angle'], $conf['fontFile'], $this->recodeString($conf['text']), $conf['splitRendering.']);
- if ($conf['angle']< 0) {
- $pixelWidth = abs($bounds[4]-$bounds[0]);
+ if ($conf['angle'] < 0) {
+ $pixelWidth = abs($bounds[4] - $bounds[0]);
} elseif ($conf['angle'] > 0) {
- $pixelWidth = abs($bounds[2]-$bounds[6]);
+ $pixelWidth = abs($bounds[2] - $bounds[6]);
} else {
- $pixelWidth = abs($bounds[4]-$bounds[6]);
+ $pixelWidth = abs($bounds[4] - $bounds[6]);
}
// Size is fine, exit:
- if ($pixelWidth <= $maxWidth) {
+ if ($pixelWidth <= $maxWidth) {
break;
} else {
$conf['fontSize']--;
}
- } while ($conf['fontSize']>1);
- }//if spacing
+ } while ($conf['fontSize'] > 1);
+ }
+ //if spacing
}
return $conf['fontSize'];
}
* @param integer Scale factor
* @return array Information array.
*/
- function ImageTTFBBoxWrapper($fontSize, $angle, $fontFile, $string, $splitRendering, $sF=1) {
+ function ImageTTFBBoxWrapper($fontSize, $angle, $fontFile, $string, $splitRendering, $sF = 1) {
// Initialize:
$offsetInfo = array();
- $stringParts = $this->splitString($string,$splitRendering,$fontSize,$fontFile);
+ $stringParts = $this->splitString($string, $splitRendering, $fontSize, $fontFile);
// Traverse string parts:
- foreach($stringParts as $strCfg) {
+ foreach ($stringParts as $strCfg) {
$fontFile = t3lib_stdGraphic::prependAbsolutePath($strCfg['fontFile']);
if (is_readable($fontFile)) {
// Calculate Bounding Box for part:
- $calc = ImageTTFBBox(t3lib_div::freetypeDpiComp($sF*$strCfg['fontSize']), $angle, $fontFile, $strCfg['str']);
+ $calc = ImageTTFBBox(t3lib_div::freetypeDpiComp($sF * $strCfg['fontSize']), $angle, $fontFile, $strCfg['str']);
// Calculate offsets:
- if (!count($offsetInfo)) {
- $offsetInfo = $calc; // First run, just copy over.
+ if (!count($offsetInfo)) {
+ $offsetInfo = $calc; // First run, just copy over.
} else {
- $offsetInfo[2]+=$calc[2]-$calc[0]+intval($splitRendering['compX'])+intval($strCfg['xSpaceBefore'])+intval($strCfg['xSpaceAfter']);
- $offsetInfo[3]+=$calc[3]-$calc[1]-intval($splitRendering['compY'])-intval($strCfg['ySpaceBefore'])-intval($strCfg['ySpaceAfter']);
- $offsetInfo[4]+=$calc[4]-$calc[6]+intval($splitRendering['compX'])+intval($strCfg['xSpaceBefore'])+intval($strCfg['xSpaceAfter']);
- $offsetInfo[5]+=$calc[5]-$calc[7]-intval($splitRendering['compY'])-intval($strCfg['ySpaceBefore'])-intval($strCfg['ySpaceAfter']);
+ $offsetInfo[2] += $calc[2] - $calc[0] + intval($splitRendering['compX']) + intval($strCfg['xSpaceBefore']) + intval($strCfg['xSpaceAfter']);
+ $offsetInfo[3] += $calc[3] - $calc[1] - intval($splitRendering['compY']) - intval($strCfg['ySpaceBefore']) - intval($strCfg['ySpaceAfter']);
+ $offsetInfo[4] += $calc[4] - $calc[6] + intval($splitRendering['compX']) + intval($strCfg['xSpaceBefore']) + intval($strCfg['xSpaceAfter']);
+ $offsetInfo[5] += $calc[5] - $calc[7] - intval($splitRendering['compY']) - intval($strCfg['ySpaceBefore']) - intval($strCfg['ySpaceAfter']);
}
} else {
- debug('cannot read file: '.$fontFile, 't3lib_stdGraphic::ImageTTFBBoxWrapper()');
+ debug('cannot read file: ' . $fontFile, 't3lib_stdGraphic::ImageTTFBBoxWrapper()');
}
}
* @param integer Scale factor
* @return void
*/
- function ImageTTFTextWrapper($im, $fontSize, $angle, $x, $y, $color, $fontFile, $string, $splitRendering,$sF=1) {
+ function ImageTTFTextWrapper($im, $fontSize, $angle, $x, $y, $color, $fontFile, $string, $splitRendering, $sF = 1) {
// Initialize:
- $stringParts = $this->splitString($string,$splitRendering,$fontSize,$fontFile);
- $x = ceil($sF*$x);
- $y = ceil($sF*$y);
+ $stringParts = $this->splitString($string, $splitRendering, $fontSize, $fontFile);
+ $x = ceil($sF * $x);
+ $y = ceil($sF * $y);
// Traverse string parts:
- foreach($stringParts as $i => $strCfg) {
+ foreach ($stringParts as $i => $strCfg) {
// Initialize:
$colorIndex = $color;
// Set custom color if any (only when niceText is off):
- if ($strCfg['color'] && $sF==1) {
+ if ($strCfg['color'] && $sF == 1) {
$cols = $this->convertColor($strCfg['color']);
- $colorIndex = ImageColorAllocate($im, $cols[0],$cols[1],$cols[2]);
+ $colorIndex = ImageColorAllocate($im, $cols[0], $cols[1], $cols[2]);
$colorIndex = $color >= 0 ? $colorIndex : -$colorIndex;
}
// Setting xSpaceBefore
- if ($i) {
- $x+= intval($strCfg['xSpaceBefore']);
- $y-= intval($strCfg['ySpaceBefore']);
+ if ($i) {
+ $x += intval($strCfg['xSpaceBefore']);
+ $y -= intval($strCfg['ySpaceBefore']);
}
$fontFile = t3lib_stdGraphic::prependAbsolutePath($strCfg['fontFile']);
if (is_readable($fontFile)) {
// Render part:
- ImageTTFText($im, t3lib_div::freetypeDpiComp($sF*$strCfg['fontSize']), $angle, $x, $y, $colorIndex, $fontFile, $strCfg['str']);
+ ImageTTFText($im, t3lib_div::freetypeDpiComp($sF * $strCfg['fontSize']), $angle, $x, $y, $colorIndex, $fontFile, $strCfg['str']);
// Calculate offset to apply:
- $wordInf = ImageTTFBBox(t3lib_div::freetypeDpiComp($sF*$strCfg['fontSize']), $angle, t3lib_stdGraphic::prependAbsolutePath($strCfg['fontFile']), $strCfg['str']);
- $x+= $wordInf[2]-$wordInf[0]+intval($splitRendering['compX'])+intval($strCfg['xSpaceAfter']);
- $y+= $wordInf[5]-$wordInf[7]-intval($splitRendering['compY'])-intval($strCfg['ySpaceAfter']);
+ $wordInf = ImageTTFBBox(t3lib_div::freetypeDpiComp($sF * $strCfg['fontSize']), $angle, t3lib_stdGraphic::prependAbsolutePath($strCfg['fontFile']), $strCfg['str']);
+ $x += $wordInf[2] - $wordInf[0] + intval($splitRendering['compX']) + intval($strCfg['xSpaceAfter']);
+ $y += $wordInf[5] - $wordInf[7] - intval($splitRendering['compY']) - intval($strCfg['ySpaceAfter']);
} else {
- debug('cannot read file: '.$fontFile, 't3lib_stdGraphic::ImageTTFTextWrapper()');
+ debug('cannot read file: ' . $fontFile, 't3lib_stdGraphic::ImageTTFTextWrapper()');
}
}
* @param string Current font file
* @return array Array with input string splitted according to configuration
*/
- function splitString($string,$splitRendering,$fontSize,$fontFile) {
+ function splitString($string, $splitRendering, $fontSize, $fontFile) {
// Initialize by setting the whole string and default configuration as the first entry.
$result = array();
// Traverse the split-rendering configuration:
// Splitting will create more entries in $result with individual configurations.
- if (is_array($splitRendering)) {
+ if (is_array($splitRendering)) {
$sKeyArray = t3lib_TStemplate::sortedKeyList($splitRendering);
// Traverse configured options:
- foreach($sKeyArray as $key) {
- $cfg = $splitRendering[$key.'.'];
+ foreach ($sKeyArray as $key) {
+ $cfg = $splitRendering[$key . '.'];
// Process each type of split rendering keyword:
- switch((string)$splitRendering[$key]) {
+ switch ((string) $splitRendering[$key]) {
case 'highlightWord':
- if (strlen($cfg['value'])) {
+ if (strlen($cfg['value'])) {
$newResult = array();
// Traverse the current parts of the result array:
- foreach($result as $part) {
+ foreach ($result as $part) {
// Explode the string value by the word value to highlight:
- $explodedParts = explode($cfg['value'],$part['str']);
- foreach($explodedParts as $c => $expValue) {
- if (strlen($expValue)) {
- $newResult[] = array_merge($part,array('str' => $expValue));
+ $explodedParts = explode($cfg['value'], $part['str']);
+ foreach ($explodedParts as $c => $expValue) {
+ if (strlen($expValue)) {
+ $newResult[] = array_merge($part, array('str' => $expValue));
}
- if ($c+1 < count($explodedParts)) {
+ if ($c + 1 < count($explodedParts)) {
$newResult[] = array(
'str' => $cfg['value'],
'fontSize' => $cfg['fontSize'] ? $cfg['fontSize'] : $part['fontSize'],
}
// Set the new result as result array:
- if (count($newResult)) {
+ if (count($newResult)) {
$result = $newResult;
}
}
break;
case 'charRange':
- if (strlen($cfg['value'])) {
+ if (strlen($cfg['value'])) {
// Initialize range:
- $ranges = t3lib_div::trimExplode(',',$cfg['value'],1);
- foreach($ranges as $i => $rangeDef) {
- $ranges[$i] = t3lib_div::intExplode('-',$ranges[$i]);
- if (!isset($ranges[$i][1])) $ranges[$i][1] = $ranges[$i][0];
+ $ranges = t3lib_div::trimExplode(',', $cfg['value'], 1);
+ foreach ($ranges as $i => $rangeDef) {
+ $ranges[$i] = t3lib_div::intExplode('-', $ranges[$i]);
+ if (!isset($ranges[$i][1])) {
+ $ranges[$i][1] = $ranges[$i][0];
+ }
}
$newResult = array();
// Traverse the current parts of the result array:
- foreach($result as $part) {
+ foreach ($result as $part) {
// Initialize:
$currentState = -1;
// Explode the string value by the word value to highlight:
$utf8Chars = $this->singleChars($part['str']);
- foreach($utf8Chars as $utfChar) {
+ foreach ($utf8Chars as $utfChar) {
// Find number and evaluate position:
$uNumber = $this->csConvObj->utf8CharToUnumber($utfChar);
$inRange = 0;
- foreach($ranges as $rangeDef) {
+ foreach ($ranges as $rangeDef) {
if ($uNumber >= $rangeDef[0] && (!$rangeDef[1] || $uNumber <= $rangeDef[1])) {
$inRange = 1;
break;
}
}
- if ($currentState==-1) $currentState = $inRange; // Initialize first char
+ if ($currentState == -1) {
+ $currentState = $inRange;
+ } // Initialize first char
// Switch bank:
- if ($inRange != $currentState && !t3lib_div::inList('32,10,13,9',$uNumber)) {
+ if ($inRange != $currentState && !t3lib_div::inList('32,10,13,9', $uNumber)) {
// Set result:
- if (strlen($bankAccum)) {
+ if (strlen($bankAccum)) {
$newResult[] = array(
'str' => $bankAccum,
'fontSize' => $currentState && $cfg['fontSize'] ? $cfg['fontSize'] : $part['fontSize'],
}
// Add char to bank:
- $bankAccum.=$utfChar;
+ $bankAccum .= $utfChar;
}
// Set result for FINAL part:
- if (strlen($bankAccum)) {
+ if (strlen($bankAccum)) {
$newResult[] = array(
'str' => $bankAccum,
'fontSize' => $currentState && $cfg['fontSize'] ? $cfg['fontSize'] : $part['fontSize'],
}
// Set the new result as result array:
- if (count($newResult)) {
+ if (count($newResult)) {
$result = $newResult;
}
}
* @access private
* @see calcBBox()
*/
- function calcWordSpacing($conf, $scaleFactor=1) {
+ function calcWordSpacing($conf, $scaleFactor = 1) {
$spacing = intval($conf['spacing']);
$wordSpacing = intval($conf['wordSpacing']);
- $wordSpacing = $wordSpacing?$wordSpacing:$spacing*2;
+ $wordSpacing = $wordSpacing ? $wordSpacing : $spacing * 2;
- $spacing*=$scaleFactor;
- $wordSpacing*=$scaleFactor;
+ $spacing *= $scaleFactor;
+ $wordSpacing *= $scaleFactor;
- return array($spacing,$wordSpacing);
+ return array($spacing, $wordSpacing);
}
/**
function getTextScalFactor($conf) {
if (!$conf['niceText']) {
$sF = 1;
- } else { // NICETEXT::
- $sF = t3lib_div::intInRange($conf['niceText.']['scaleFactor'],2,5);
+ } else { // NICETEXT::
+ $sF = t3lib_utility_Math::forceIntegerInRange($conf['niceText.']['scaleFactor'], 2, 5);
}
return $sF;
}
foreach ($wordPairs as $index => $wordPair) {
$wordWidth = $this->getRenderedTextWidth($wordPair, $conf);
if ($index == 0 || $currentWidth + $wordWidth <= $breakWidth) {
- $currentWidth+= $wordWidth;
- $phrase.= $wordPair;
+ $currentWidth += $wordWidth;
+ $phrase .= $wordPair;
} else {
// Render the current phrase that is below breakWidth:
$this->ImageTTFTextWrapper($im, $fontSize, $angle, $x, $y, $color, $fontFile, $phrase, $splitRendering, $sF);
// Calculate the news height offset:
- $y+= $breakSpace;
+ $y += $breakSpace;
// Restart the phrase:
$currentWidth = $wordWidth;
$phrase = $wordPair;
protected function getWordPairsForLineBreak($string) {
$wordPairs = array();
- $wordsArray = preg_split('#([- .,!:]+)#', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
+ $wordsArray = preg_split('#([- .,!:]+)#', $string, -1, PREG_SPLIT_DELIM_CAPTURE);
$wordsCount = count($wordsArray);
- for ($index=0; $index < $wordsCount; $index+= 2) {
+ for ($index = 0; $index < $wordsCount; $index += 2) {
$wordPairs[] = $wordsArray[$index] . $wordsArray[$index + 1];
}
*/
protected function getRenderedTextWidth($text, $conf) {
$bounds = $this->ImageTTFBBoxWrapper($conf['fontSize'], $conf['angle'], $conf['fontFile'], $this->recodeString($text), $conf['splitRendering.']);
- if ($conf['angle']< 0) {
- $pixelWidth = abs($bounds[4]-$bounds[0]);
+ if ($conf['angle'] < 0) {
+ $pixelWidth = abs($bounds[4] - $bounds[0]);
} elseif ($conf['angle'] > 0) {
- $pixelWidth = abs($bounds[2]-$bounds[6]);
+ $pixelWidth = abs($bounds[2] - $bounds[6]);
} else {
- $pixelWidth = abs($bounds[4]-$bounds[6]);
+ $pixelWidth = abs($bounds[4] - $bounds[6]);
}
return $pixelWidth;
}
}
-
-
-
-
-
-
-
-
-
/*********************************************
*
* Other GIFBUILDER objects related to TEXT
* @return void
* @see tslib_gifBuilder::make(), makeText()
*/
- function makeOutline(&$im,$conf,$workArea,$txtConf) {
+ function makeOutline(&$im, $conf, $workArea, $txtConf) {
$thickness = intval($conf['thickness']);
- if ($thickness) {
+ if ($thickness) {
$txtConf['fontColor'] = $conf['color'];
- $outLineDist = t3lib_div::intInRange($thickness,1,2);
- for ($b=1;$b<=$outLineDist;$b++) {
- if ($b==1) {
+ $outLineDist = t3lib_utility_Math::forceIntegerInRange($thickness, 1, 2);
+ for ($b = 1; $b <= $outLineDist; $b++) {
+ if ($b == 1) {
$it = 8;
} else {
$it = 16;
}
$outL = $this->circleOffset($b, $it);
- for ($a=0;$a<$it;$a++) {
- $this->makeText($im,$txtConf,$this->applyOffset($workArea,$outL[$a]));
+ for ($a = 0; $a < $it; $a++) {
+ $this->makeText($im, $txtConf, $this->applyOffset($workArea, $outL[$a]));
}
}
}
* @return array
* @see makeOutline()
*/
- function circleOffset($distance, $iterations) {
- $res = Array();
- if ($distance && $iterations) {
- for ($a=0;$a<$iterations;$a++) {
- $yOff = round(sin(2*pi()/$iterations*($a+1))*100*$distance);
- if ($yOff) {$yOff = intval(ceil(abs($yOff/100))*($yOff/abs($yOff)));}
- $xOff = round(cos(2*pi()/$iterations*($a+1))*100*$distance);
- if ($xOff) {$xOff = intval(ceil(abs($xOff/100))*($xOff/abs($xOff)));}
- $res[$a] = Array($xOff,$yOff);
+ function circleOffset($distance, $iterations) {
+ $res = array();
+ if ($distance && $iterations) {
+ for ($a = 0; $a < $iterations; $a++) {
+ $yOff = round(sin(2 * pi() / $iterations * ($a + 1)) * 100 * $distance);
+ if ($yOff) {
+ $yOff = intval(ceil(abs($yOff / 100)) * ($yOff / abs($yOff)));
+ }
+ $xOff = round(cos(2 * pi() / $iterations * ($a + 1)) * 100 * $distance);
+ if ($xOff) {
+ $xOff = intval(ceil(abs($xOff / 100)) * ($xOff / abs($xOff)));
+ }
+ $res[$a] = array($xOff, $yOff);
}
}
return $res;
* @return void
* @see tslib_gifBuilder::make(), makeShadow()
*/
- function makeEmboss(&$im,$conf,$workArea,$txtConf) {
- $conf['color']=$conf['highColor'];
- $this->makeShadow($im,$conf,$workArea,$txtConf);
- $newOffset = t3lib_div::intExplode(',',$conf['offset']);
- $newOffset[0]*=-1;
- $newOffset[1]*=-1;
- $conf['offset']=implode(',',$newOffset);
- $conf['color']=$conf['lowColor'];
- $this->makeShadow($im,$conf,$workArea,$txtConf);
+ function makeEmboss(&$im, $conf, $workArea, $txtConf) {
+ $conf['color'] = $conf['highColor'];
+ $this->makeShadow($im, $conf, $workArea, $txtConf);
+ $newOffset = t3lib_div::intExplode(',', $conf['offset']);
+ $newOffset[0] *= -1;
+ $newOffset[1] *= -1;
+ $conf['offset'] = implode(',', $newOffset);
+ $conf['color'] = $conf['lowColor'];
+ $this->makeShadow($im, $conf, $workArea, $txtConf);
}
/**
* @return void
* @see tslib_gifBuilder::make(), makeText(), makeEmboss()
*/
- function makeShadow(&$im,$conf,$workArea,$txtConf) {
- $workArea = $this->applyOffset($workArea,t3lib_div::intExplode(',',$conf['offset']));
- $blurRate = t3lib_div::intInRange(intval($conf['blur']),0,99);
+ function makeShadow(&$im, $conf, $workArea, $txtConf) {
+ $workArea = $this->applyOffset($workArea, t3lib_div::intExplode(',', $conf['offset']));
+ $blurRate = t3lib_utility_Math::forceIntegerInRange(intval($conf['blur']), 0, 99);
- if (!$blurRate || $this->NO_IM_EFFECTS) { // No effects if ImageMagick ver. 5+
+ if (!$blurRate || $this->NO_IM_EFFECTS) { // No effects if ImageMagick ver. 5+
$txtConf['fontColor'] = $conf['color'];
- $this->makeText($im,$txtConf,$workArea);
+ $this->makeText($im, $txtConf, $workArea);
} else {
$w = imagesx($im);
$h = imagesy($im);
- $blurBorder= 3; // area around the blur used for cropping something
+ $blurBorder = 3; // area around the blur used for cropping something
$tmpStr = $this->randomName();
- $fileMenu = $tmpStr.'_menu.'.$this->gifExtension;
- $fileColor = $tmpStr.'_color.'.$this->gifExtension;
- $fileMask = $tmpStr.'_mask.'.$this->gifExtension;
+ $fileMenu = $tmpStr . '_menu.' . $this->gifExtension;
+ $fileColor = $tmpStr . '_color.' . $this->gifExtension;
+ $fileMask = $tmpStr . '_mask.' . $this->gifExtension;
// BlurColor Image laves
$blurColImg = imagecreatetruecolor($w, $h);
- $bcols=$this->convertColor($conf['color']);
- $Bcolor = ImageColorAllocate($blurColImg, $bcols[0],$bcols[1],$bcols[2]);
+ $bcols = $this->convertColor($conf['color']);
+ $Bcolor = ImageColorAllocate($blurColImg, $bcols[0], $bcols[1], $bcols[2]);
ImageFilledRectangle($blurColImg, 0, 0, $w, $h, $Bcolor);
$this->ImageWrite($blurColImg, $fileColor);
ImageDestroy($blurColImg);
// The mask is made: BlurTextImage
$blurTextImg = imagecreatetruecolor($w + $blurBorder * 2, $h + $blurBorder * 2);
- $Bcolor = ImageColorAllocate($blurTextImg, 0,0,0); // black background
- ImageFilledRectangle($blurTextImg, 0, 0, $w+$blurBorder*2, $h+$blurBorder*2, $Bcolor);
+ $Bcolor = ImageColorAllocate($blurTextImg, 0, 0, 0); // black background
+ ImageFilledRectangle($blurTextImg, 0, 0, $w + $blurBorder * 2, $h + $blurBorder * 2, $Bcolor);
$txtConf['fontColor'] = 'white';
- $blurBordArr = Array($blurBorder,$blurBorder);
- $this->makeText($blurTextImg,$txtConf, $this->applyOffset($workArea,$blurBordArr));
- $this->ImageWrite($blurTextImg, $fileMask); // dump to temporary file
- ImageDestroy($blurTextImg); // destroy
+ $blurBordArr = array($blurBorder, $blurBorder);
+ $this->makeText($blurTextImg, $txtConf, $this->applyOffset($workArea, $blurBordArr));
+ $this->ImageWrite($blurTextImg, $fileMask); // dump to temporary file
+ ImageDestroy($blurTextImg); // destroy
- $command='';
- $command.=$this->maskNegate;
+ $command = '';
+ $command .= $this->maskNegate;
- if ($this->V5_EFFECTS) {
- $command.=$this->v5_blur($blurRate+1);
+ if ($this->V5_EFFECTS) {
+ $command .= $this->v5_blur($blurRate + 1);
} else {
// Blurring of the mask
- $times = ceil($blurRate/10); // How many blur-commands that is executed. Min = 1;
- $newBlurRate = $blurRate*4; // Here I boost the blur-rate so that it is 100 already at 25. The rest is done by up to 99 iterations of the blur-command.
- $newBlurRate = t3lib_div::intInRange($newBlurRate,1,99);
- for ($a=0;$a<$times;$a++) { // Building blur-command
- $command.=' -blur '.$blurRate;
+ $times = ceil($blurRate / 10); // How many blur-commands that is executed. Min = 1;
+ $newBlurRate = $blurRate * 4; // Here I boost the blur-rate so that it is 100 already at 25. The rest is done by up to 99 iterations of the blur-command.
+ $newBlurRate = t3lib_utility_Math::forceIntegerInRange($newBlurRate, 1, 99);
+ for ($a = 0; $a < $times; $a++) { // Building blur-command
+ $command .= ' -blur ' . $blurRate;
}
}
- $this->imageMagickExec($fileMask,$fileMask,$command.' +matte');
+ $this->imageMagickExec($fileMask, $fileMask, $command . ' +matte');
- $blurTextImg_tmp = $this->imageCreateFromFile($fileMask); // the mask is loaded again
- if ($blurTextImg_tmp) { // if nothing went wrong we continue with the blurred mask
+ $blurTextImg_tmp = $this->imageCreateFromFile($fileMask); // the mask is loaded again
+ if ($blurTextImg_tmp) { // if nothing went wrong we continue with the blurred mask
// cropping the border from the mask
$blurTextImg = imagecreatetruecolor($w, $h);
$this->imagecopyresized($blurTextImg, $blurTextImg_tmp, 0, 0, $blurBorder, $blurBorder, $w, $h, $w, $h);
- ImageDestroy($blurTextImg_tmp); // Destroy the temporary mask
+ ImageDestroy($blurTextImg_tmp); // Destroy the temporary mask
// adjust the mask
$intensity = 40;
- if ($conf['intensity']) {
- $intensity = t3lib_div::intInRange($conf['intensity'],0,100);
+ if ($conf['intensity']) {
+ $intensity = t3lib_utility_Math::forceIntegerInRange($conf['intensity'], 0, 100);
}
- $intensity = ceil(255-($intensity/100*255));
- $this->inputLevels($blurTextImg,0,$intensity,$this->maskNegate);
+ $intensity = ceil(255 - ($intensity / 100 * 255));
+ $this->inputLevels($blurTextImg, 0, $intensity, $this->maskNegate);
- $opacity = t3lib_div::intInRange(intval($conf['opacity']),0,100);
- if ($opacity && $opacity<100) {
- $high = ceil(255*$opacity/100);
- $this->outputLevels($blurTextImg,0,$high,$this->maskNegate); // reducing levels as the opacity demands
+ $opacity = t3lib_utility_Math::forceIntegerInRange(intval($conf['opacity']), 0, 100);
+ if ($opacity && $opacity < 100) {
+ $high = ceil(255 * $opacity / 100);
+ $this->outputLevels($blurTextImg, 0, $high, $this->maskNegate); // reducing levels as the opacity demands
}
- $this->ImageWrite($blurTextImg, $fileMask); // Dump the mask again
- ImageDestroy($blurTextImg); // Destroy the mask
+ $this->ImageWrite($blurTextImg, $fileMask); // Dump the mask again
+ ImageDestroy($blurTextImg); // Destroy the mask
// The pictures are combined
- $this->ImageWrite($im, $fileMenu); // The main pictures is saved temporarily
+ $this->ImageWrite($im, $fileMenu); // The main pictures is saved temporarily
- $this->combineExec($fileMenu,$fileColor,$fileMask,$fileMenu);
+ $this->combineExec($fileMenu, $fileColor, $fileMask, $fileMenu);
- $backIm = $this->imageCreateFromFile($fileMenu); // The main image is loaded again...
- if ($backIm) { // ... and if nothing went wrong we load it onto the old one.
- ImageColorTransparent($backIm,-1);
+ $backIm = $this->imageCreateFromFile($fileMenu); // The main image is loaded again...
+ if ($backIm) { // ... and if nothing went wrong we load it onto the old one.
+ ImageColorTransparent($backIm, -1);
$im = $backIm;
}
}
// Deleting temporary files;
- if (!$this->dontUnlinkTempFiles) {
+ if (!$this->dontUnlinkTempFiles) {
unlink($fileMenu);
unlink($fileColor);
unlink($fileMask);
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
/****************************
*
* Other GIFBUILDER objects
* @return void
* @see tslib_gifBuilder::make()
*/
- function makeBox(&$im,$conf,$workArea) {
- $cords = t3lib_div::intExplode(',',$conf['dimensions'].',,,');
- $conf['offset']=$cords[0].','.$cords[1];
- $cords = $this->objPosition($conf,$workArea,Array($cords[2],$cords[3]));
- $cols=$this->convertColor($conf['color']);
- if (!$this->truecolor) {
- $reduce = t3lib_div::intInRange($this->setup['reduceColors'], 256, $this->truecolorColors, 256);
- $this->reduceColors($im, $reduce-1, $reduce-2); // If "reduce-1" colors (or more) are used reduce them to "reduce-2"
- }
+ function makeBox(&$im, $conf, $workArea) {
+ $cords = t3lib_div::intExplode(',', $conf['dimensions'] . ',,,');
+ $conf['offset'] = $cords[0] . ',' . $cords[1];
+ $cords = $this->objPosition($conf, $workArea, array($cords[2], $cords[3]));
+ $cols = $this->convertColor($conf['color']);
$opacity = 0;
if (isset($conf['opacity'])) {
// conversion:
// PHP 0 = opaque, 127 = transparent
// TYPO3 100 = opaque, 0 = transparent
- $opacity = t3lib_div::intInRange(intval($conf['opacity']), 1, 100, 1);
+ $opacity = t3lib_utility_Math::forceIntegerInRange(intval($conf['opacity']), 1, 100, 1);
$opacity = abs($opacity - 100);
$opacity = round((127 * $opacity) / 100);
}
- $tmpColor = ImageColorAllocateAlpha($im, $cols[0],$cols[1],$cols[2], $opacity);
- imagefilledrectangle($im, $cords[0], $cords[1], $cords[0]+$cords[2]-1, $cords[1]+$cords[3]-1, $tmpColor);
+ $tmpColor = ImageColorAllocateAlpha($im, $cols[0], $cols[1], $cols[2], $opacity);
+ imagefilledrectangle($im, $cords[0], $cords[1], $cords[0] + $cords[2] - 1, $cords[1] + $cords[3] - 1, $tmpColor);
}
/**
* file {
* XY = 200,200
* format = jpg
- * quality = 100
+ * quality = 100
* 10 = ELLIPSE
- * 10.dimensions = 100,100,50,50
+ * 10.dimensions = 100,100,50,50
* 10.color = red
- *
+ *
* $workArea = X,Y
* $conf['dimensions'] = offset x, offset y, width of ellipse, height of ellipse
*
$ellipseConfiguration = t3lib_div::intExplode(',', $conf['dimensions'] . ',,,');
$conf['offset'] = $ellipseConfiguration[0] . ',' . $ellipseConfiguration[1]; // ellipse offset inside workArea (x/y)
- // @see objPosition
+ // @see objPosition
$imageCoordinates = $this->objPosition($conf, $workArea, array($ellipseConfiguration[2], $ellipseConfiguration[3]));
$color = $this->convertColor($conf['color']);
* @return void
* @see tslib_gifBuilder::make(), applyImageMagickToPHPGif()
*/
- function makeEffect(&$im, $conf) {
+ function makeEffect(&$im, $conf) {
$commands = $this->IMparams($conf['value']);
- if ($commands) {
+ if ($commands) {
$this->applyImageMagickToPHPGif($im, $commands);
}
}
* @access private
* @see makeEffect()
*/
- function IMparams($setup) {
- if (!trim($setup)){return '';}
+ function IMparams($setup) {
+ if (!trim($setup)) {
+ return '';
+ }
$effects = explode('|', $setup);
$commands = '';
foreach ($effects as $val) {
- $pairs=explode('=',$val,2);
+ $pairs = explode('=', $val, 2);
$value = trim($pairs[1]);
$effect = strtolower(trim($pairs[0]));
- switch($effect) {
+ switch ($effect) {
case 'gamma':
- $commands.=' -gamma '.doubleval($value);
+ $commands .= ' -gamma ' . doubleval($value);
break;
case 'blur':
- if (!$this->NO_IM_EFFECTS) {
- if ($this->V5_EFFECTS) {
- $commands.=$this->v5_blur($value);
+ if (!$this->NO_IM_EFFECTS) {
+ if ($this->V5_EFFECTS) {
+ $commands .= $this->v5_blur($value);
} else {
- $commands.=' -blur '.t3lib_div::intInRange($value,1,99);
+ $commands .= ' -blur ' . t3lib_utility_Math::forceIntegerInRange($value, 1, 99);
}
}
break;
case 'sharpen':
- if (!$this->NO_IM_EFFECTS) {
- if ($this->V5_EFFECTS) {
- $commands.=$this->v5_sharpen($value);
+ if (!$this->NO_IM_EFFECTS) {
+ if ($this->V5_EFFECTS) {
+ $commands .= $this->v5_sharpen($value);
} else {
- $commands.=' -sharpen '.t3lib_div::intInRange($value,1,99);
+ $commands .= ' -sharpen ' . t3lib_utility_Math::forceIntegerInRange($value, 1, 99);
}
}
break;
case 'rotate':
- $commands.=' -rotate '.t3lib_div::intInRange($value,0,360);
+ $commands .= ' -rotate ' . t3lib_utility_Math::forceIntegerInRange($value, 0, 360);
break;
case 'solarize':
- $commands.=' -solarize '.t3lib_div::intInRange($value,0,99);
+ $commands .= ' -solarize ' . t3lib_utility_Math::forceIntegerInRange($value, 0, 99);
break;
case 'swirl':
- $commands.=' -swirl '.t3lib_div::intInRange($value,0,1000);
+ $commands .= ' -swirl ' . t3lib_utility_Math::forceIntegerInRange($value, 0, 1000);
break;
case 'wave':
- $params = t3lib_div::intExplode(',',$value);
- $commands.=' -wave '.t3lib_div::intInRange($params[0],0,99).'x'.t3lib_div::intInRange($params[1],0,99);
+ $params = t3lib_div::intExplode(',', $value);
+ $commands .= ' -wave ' . t3lib_utility_Math::forceIntegerInRange($params[0], 0, 99) . 'x' . t3lib_utility_Math::forceIntegerInRange($params[1], 0, 99);
break;
case 'charcoal':
- $commands.=' -charcoal '.t3lib_div::intInRange($value,0,100);
+ $commands .= ' -charcoal ' . t3lib_utility_Math::forceIntegerInRange($value, 0, 100);
break;
case 'gray':
- $commands.=' -colorspace GRAY';
+ $commands .= ' -colorspace GRAY';
break;
case 'edge':
- $commands.=' -edge '.t3lib_div::intInRange($value,0,99);
+ $commands .= ' -edge ' . t3lib_utility_Math::forceIntegerInRange($value, 0, 99);
break;
case 'emboss':
- $commands.=' -emboss';
+ $commands .= ' -emboss';
break;
case 'flip':
- $commands.=' -flip';
+ $commands .= ' -flip';
break;
case 'flop':
- $commands.=' -flop';
+ $commands .= ' -flop';
break;
case 'colors':
- $commands.=' -colors '.t3lib_div::intInRange($value,2,255);
+ $commands .= ' -colors ' . t3lib_utility_Math::forceIntegerInRange($value, 2, 255);
break;
case 'shear':
- $commands.=' -shear '.t3lib_div::intInRange($value,-90,90);
+ $commands .= ' -shear ' . t3lib_utility_Math::forceIntegerInRange($value, -90, 90);
break;
case 'invert':
- $commands.=' -negate';
+ $commands .= ' -negate';
break;
}
}
* @return void
* @see tslib_gifBuilder::make(), autoLevels(), outputLevels(), inputLevels()
*/
- function adjust(&$im, $conf) {
+ function adjust(&$im, $conf) {
$setup = $conf['value'];
- if (!trim($setup)){return '';}
+ if (!trim($setup)) {
+ return '';
+ }
$effects = explode('|', $setup);
foreach ($effects as $val) {
- $pairs=explode('=',$val,2);
+ $pairs = explode('=', $val, 2);
$value = trim($pairs[1]);
$effect = strtolower(trim($pairs[0]));
- switch($effect) {
- case 'inputlevels': // low,high
- $params = t3lib_div::intExplode(',',$value);
- $this->inputLevels($im,$params[0],$params[1]);
+ switch ($effect) {
+ case 'inputlevels': // low,high
+ $params = t3lib_div::intExplode(',', $value);
+ $this->inputLevels($im, $params[0], $params[1]);
break;
case 'outputlevels':
- $params = t3lib_div::intExplode(',',$value);
- $this->outputLevels($im,$params[0],$params[1]);
+ $params = t3lib_div::intExplode(',', $value);
+ $this->outputLevels($im, $params[0], $params[1]);
break;
case 'autolevels':
$this->autoLevels($im);
* @return void
* @see tslib_gifBuilder::make()
*/
- function crop(&$im,$conf) {
- $this->setWorkArea(''); // clears workArea to total image
- $cords = t3lib_div::intExplode(',',$conf['crop'].',,,');
- $conf['offset']=$cords[0].','.$cords[1];
- $cords = $this->objPosition($conf,$this->workArea,Array($cords[2],$cords[3]));
+ function crop(&$im, $conf) {
+ $this->setWorkArea(''); // clears workArea to total image
+ $cords = t3lib_div::intExplode(',', $conf['crop'] . ',,,');
+ $conf['offset'] = $cords[0] . ',' . $cords[1];
+ $cords = $this->objPosition($conf, $this->workArea, array($cords[2], $cords[3]));
$newIm = imagecreatetruecolor($cords[2], $cords[3]);
- $cols=$this->convertColor($conf['backColor']?$conf['backColor']:$this->setup['backColor']);
- $Bcolor = ImageColorAllocate($newIm, $cols[0],$cols[1],$cols[2]);
+ $cols = $this->convertColor($conf['backColor'] ? $conf['backColor'] : $this->setup['backColor']);
+ $Bcolor = ImageColorAllocate($newIm, $cols[0], $cols[1], $cols[2]);
ImageFilledRectangle($newIm, 0, 0, $cords[2], $cords[3], $Bcolor);
- $newConf = Array();
- $workArea = Array(0,0,$cords[2],$cords[3]);
- if ($cords[0]<0) {$workArea[0]=abs($cords[0]);} else {$newConf['offset']=-$cords[0];}
- if ($cords[1]<0) {$workArea[1]=abs($cords[1]);} else {$newConf['offset'].=','.-$cords[1];}
+ $newConf = array();
+ $workArea = array(0, 0, $cords[2], $cords[3]);
+ if ($cords[0] < 0) {
+ $workArea[0] = abs($cords[0]);
+ } else {
+ $newConf['offset'] = -$cords[0];
+ }
+ if ($cords[1] < 0) {
+ $workArea[1] = abs($cords[1]);
+ } else {
+ $newConf['offset'] .= ',' . -$cords[1];
+ }
- $this->copyGifOntoGif($newIm,$im,$newConf,$workArea);
+ $this->copyGifOntoGif($newIm, $im, $newConf, $workArea);
$im = $newIm;
$this->w = imagesx($im);
$this->h = imagesy($im);
- $this->setWorkArea(''); // clears workArea to total image
+ $this->setWorkArea(''); // clears workArea to total image
}
/**
* @return void
* @see tslib_gifBuilder::make()
*/
- function scale(&$im,$conf) {
- if ($conf['width'] || $conf['height'] || $conf['params']) {
+ function scale(&$im, $conf) {
+ if ($conf['width'] || $conf['height'] || $conf['params']) {
$tmpStr = $this->randomName();
- $theFile = $tmpStr.'.'.$this->gifExtension;
+ $theFile = $tmpStr . '.' . $this->gifExtension;
$this->ImageWrite($im, $theFile);
- $theNewFile = $this->imageMagickConvert($theFile,$this->gifExtension,$conf['width'],$conf['height'],$conf['params'],'','');
+ $theNewFile = $this->imageMagickConvert($theFile, $this->gifExtension, $conf['width'], $conf['height'], $conf['params'], '', '');
$tmpImg = $this->imageCreateFromFile($theNewFile[3]);
- if ($tmpImg) {
+ if ($tmpImg) {
ImageDestroy($im);
$im = $tmpImg;
$this->w = imagesx($im);
$this->h = imagesy($im);
- $this->setWorkArea(''); // clears workArea to total image
+ $this->setWorkArea(''); // clears workArea to total image
}
- if (!$this->dontUnlinkTempFiles) {
+ if (!$this->dontUnlinkTempFiles) {
unlink($theFile);
- if ($theNewFile[3] && $theNewFile[3]!=$theFile) {
+ if ($theNewFile[3] && $theNewFile[3] != $theFile) {
unlink($theNewFile[3]);
}
}
* @access private
* @see tslib_gifBuilder::make()
*/
- function setWorkArea($workArea) {
- $this->workArea = t3lib_div::intExplode(',',$workArea);
- $this->workArea = $this->applyOffset($this->workArea,$this->OFFSET);
- if (!$this->workArea[2]) {$this->workArea[2]=$this->w;}
- if (!$this->workArea[3]) {$this->workArea[3]=$this->h;}
+ function setWorkArea($workArea) {
+ $this->workArea = t3lib_div::intExplode(',', $workArea);
+ $this->workArea = $this->applyOffset($this->workArea, $this->OFFSET);
+ if (!$this->workArea[2]) {
+ $this->workArea[2] = $this->w;
+ }
+ if (!$this->workArea[3]) {
+ $this->workArea[3] = $this->h;
+ }
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
/*************************
*
* Adjustment functions
* @param integer GDlib Image Pointer
* @return void
*/
- function autolevels(&$im) {
+ function autolevels(&$im) {
$totalCols = ImageColorsTotal($im);
- $min=255;
- $max=0;
- for ($c=0; $c<$totalCols; $c++) {
- $cols = ImageColorsForIndex($im,$c);
- $grayArr[] = round(($cols['red']+$cols['green']+$cols['blue'])/3);
- }
- $min=min($grayArr);
- $max=max($grayArr);
- $delta = $max-$min;
- if ($delta) {
- for ($c=0; $c<$totalCols; $c++) {
- $cols = ImageColorsForIndex($im,$c);
- $cols['red'] = floor(($cols['red']-$min)/$delta*255);
- $cols['green'] = floor(($cols['green']-$min)/$delta*255);
- $cols['blue'] = floor(($cols['blue']-$min)/$delta*255);
- ImageColorSet($im,$c,$cols['red'],$cols['green'],$cols['blue']);
+ $min = 255;
+ $max = 0;
+ for ($c = 0; $c < $totalCols; $c++) {
+ $cols = ImageColorsForIndex($im, $c);
+ $grayArr[] = round(($cols['red'] + $cols['green'] + $cols['blue']) / 3);
+ }
+ $min = min($grayArr);
+ $max = max($grayArr);
+ $delta = $max - $min;
+ if ($delta) {
+ for ($c = 0; $c < $totalCols; $c++) {
+ $cols = ImageColorsForIndex($im, $c);
+ $cols['red'] = floor(($cols['red'] - $min) / $delta * 255);
+ $cols['green'] = floor(($cols['green'] - $min) / $delta * 255);
+ $cols['blue'] = floor(($cols['blue'] - $min) / $delta * 255);
+ ImageColorSet($im, $c, $cols['red'], $cols['green'], $cols['blue']);
}
}
}
* @param boolean If swap, then low and high are swapped. (Useful for negated masks...)
* @return void
*/
- function outputLevels(&$im,$low,$high,$swap='') {
- if ($low<$high){
- $low = t3lib_div::intInRange($low,0,255);
- $high = t3lib_div::intInRange($high,0,255);
+ function outputLevels(&$im, $low, $high, $swap = '') {
+ if ($low < $high) {
+ $low = t3lib_utility_Math::forceIntegerInRange($low, 0, 255);
+ $high = t3lib_utility_Math::forceIntegerInRange($high, 0, 255);
- if ($swap) {
+ if ($swap) {
$temp = $low;
- $low = 255-$high;
- $high = 255-$temp;
+ $low = 255 - $high;
+ $high = 255 - $temp;
}
- $delta = $high-$low;
+ $delta = $high - $low;
$totalCols = ImageColorsTotal($im);
- for ($c=0; $c<$totalCols; $c++) {
- $cols = ImageColorsForIndex($im,$c);
- $cols['red'] = $low+floor($cols['red']/255*$delta);
- $cols['green'] = $low+floor($cols['green']/255*$delta);
- $cols['blue'] = $low+floor($cols['blue']/255*$delta);
- ImageColorSet($im,$c,$cols['red'],$cols['green'],$cols['blue']);
+ for ($c = 0; $c < $totalCols; $c++) {
+ $cols = ImageColorsForIndex($im, $c);
+ $cols['red'] = $low + floor($cols['red'] / 255 * $delta);
+ $cols['green'] = $low + floor($cols['green'] / 255 * $delta);
+ $cols['blue'] = $low + floor($cols['blue'] / 255 * $delta);
+ ImageColorSet($im, $c, $cols['red'], $cols['green'], $cols['blue']);
}
}
}
* @param boolean If swap, then low and high are swapped. (Useful for negated masks...)
* @return void
*/
- function inputLevels(&$im,$low,$high,$swap='') {
- if ($low<$high){
- $low = t3lib_div::intInRange($low,0,255);
- $high = t3lib_div::intInRange($high,0,255);
+ function inputLevels(&$im, $low, $high, $swap = '') {
+ if ($low < $high) {
+ $low = t3lib_utility_Math::forceIntegerInRange($low, 0, 255);
+ $high = t3lib_utility_Math::forceIntegerInRange($high, 0, 255);
- if ($swap) {
+ if ($swap) {
$temp = $low;
- $low = 255-$high;
- $high = 255-$temp;
+ $low = 255 - $high;
+ $high = 255 - $temp;
}
- $delta = $high-$low;
+ $delta = $high - $low;
$totalCols = ImageColorsTotal($im);
- for ($c=0; $c<$totalCols; $c++) {
- $cols = ImageColorsForIndex($im,$c);
- $cols['red'] = t3lib_div::intInRange(($cols['red']-$low)/$delta*255, 0,255);
- $cols['green'] = t3lib_div::intInRange(($cols['green']-$low)/$delta*255, 0,255);
- $cols['blue'] = t3lib_div::intInRange(($cols['blue']-$low)/$delta*255, 0,255);
- ImageColorSet($im,$c,$cols['red'],$cols['green'],$cols['blue']);
+ for ($c = 0; $c < $totalCols; $c++) {
+ $cols = ImageColorsForIndex($im, $c);
+ $cols['red'] = t3lib_utility_Math::forceIntegerInRange(($cols['red'] - $low) / $delta * 255, 0, 255);
+ $cols['green'] = t3lib_utility_Math::forceIntegerInRange(($cols['green'] - $low) / $delta * 255, 0, 255);
+ $cols['blue'] = t3lib_utility_Math::forceIntegerInRange(($cols['blue'] - $low) / $delta * 255, 0, 255);
+ ImageColorSet($im, $c, $cols['red'], $cols['green'], $cols['blue']);
}
}
}
/**
- * Reduce colors in image dependend on the actual amount of colors (Only works if we are not in truecolor mode)
- * This function is not needed anymore, as truecolor is now always on.
- *
- * @param integer GDlib Image Pointer
- * @param integer The max number of colors in the image before a reduction will happen; basically this means that IF the GD image current has the same amount or more colors than $limit define, THEN a reduction is performed.
- * @param integer Number of colors to reduce the image to.
- * @return void
- * @deprecated since TYPO3 4.4, this function will be removed in TYPO3 4.6.
- */
- function reduceColors(&$im,$limit, $cols) {
- t3lib_div::logDeprecatedFunction();
-
- if (!$this->truecolor && ImageColorsTotal($im)>=$limit) {
- $this->makeEffect($im, Array('value'=>'colors='.$cols) );
- }
- }
-
- /**
* Reduce colors in image using IM and create a palette based image if possible (<=256 colors)
*
* @param string Image file to reduce
* @param integer Number of colors to reduce the image to.
* @return string Reduced file
*/
- function IMreduceColors($file, $cols) {
+ function IMreduceColors($file, $cols) {
$fI = t3lib_div::split_fileref($file);
$ext = strtolower($fI['fileext']);
- $result = $this->randomName().'.'.$ext;
- if (($reduce = t3lib_div::intInRange($cols, 0, ($ext=='gif'?256:$this->truecolorColors), 0))>0) {
- $params = ' -colors '.$reduce;
- if (!$this->im_version_4) {
- // IM4 doesn't have this options but forces them automatically if applicaple (<256 colors in image)
- if ($reduce<=256) { $params .= ' -type Palette'; }
- if ($ext=='png' && $reduce<=256) { $prefix = 'png8:'; }
- }
- $this->imageMagickExec($file, $prefix.$result, $params);
- if ($result) {
+ $result = $this->randomName() . '.' . $ext;
+ if (($reduce = t3lib_utility_Math::forceIntegerInRange($cols, 0, ($ext == 'gif' ? 256 : $this->truecolorColors), 0)) > 0) {
+ $params = ' -colors ' . $reduce;
+ if ($reduce <= 256) {
+ $params .= ' -type Palette';
+ }
+ if ($ext == 'png' && $reduce <= 256) {
+ $prefix = 'png8:';
+ }
+ $this->imageMagickExec($file, $prefix . $result, $params);
+ if ($result) {
return $result;
}
}
}
-
-
-
-
-
-
-
-
-
/*********************************
*
* GIFBUILDER Helper functions
* @param string The font file
* @return string The font file with absolute path.
*/
- function prependAbsolutePath($fontFile) {
- $absPath = defined('PATH_typo3') ? dirname(PATH_thisScript).'/' :PATH_site;
- $fontFile = t3lib_div::isAbsPath($fontFile) ? $fontFile : t3lib_div::resolveBackPath($absPath.$fontFile);
+ function prependAbsolutePath($fontFile) {
+ $absPath = defined('PATH_typo3') ? dirname(PATH_thisScript) . '/' : PATH_site;
+ $fontFile = t3lib_div::isAbsPath($fontFile) ? $fontFile : t3lib_div::resolveBackPath($absPath . $fontFile);
return $fontFile;
}
* @return string The sharpening command, eg. " -sharpen 3x4"
* @see makeText(), IMparams(), v5_blur()
*/
- function v5_sharpen($factor) {
- $factor = t3lib_div::intInRange(ceil($factor/10),0,10);
+ function v5_sharpen($factor) {
+ $factor = t3lib_utility_Math::forceIntegerInRange(ceil($factor / 10), 0, 10);
- $sharpenArr=explode(',',','.$this->im5fx_sharpenSteps);
- $sharpenF= trim($sharpenArr[$factor]);
- if ($sharpenF) {
- $cmd = ' -sharpen '.$sharpenF;
+ $sharpenArr = explode(',', ',' . $this->im5fx_sharpenSteps);
+ $sharpenF = trim($sharpenArr[$factor]);
+ if ($sharpenF) {
+ $cmd = ' -sharpen ' . $sharpenF;
return $cmd;
}
}
* @return string The blurring command, eg. " -blur 3x4"
* @see makeText(), IMparams(), v5_sharpen()
*/
- function v5_blur($factor) {
- $factor = t3lib_div::intInRange(ceil($factor/10),0,10);
+ function v5_blur($factor) {
+ $factor = t3lib_utility_Math::forceIntegerInRange(ceil($factor / 10), 0, 10);
- $blurArr=explode(',',','.$this->im5fx_blurSteps);
- $blurF= trim($blurArr[$factor]);
- if ($blurF) {
- $cmd=' -blur '.$blurF;
+ $blurArr = explode(',', ',' . $this->im5fx_blurSteps);
+ $blurF = trim($blurArr[$factor]);
+ if ($blurF) {
+ $cmd = ' -blur ' . $blurF;
return $cmd;
}
}
*
* @return string
*/
- function randomName() {
+ function randomName() {
$this->createTempSubDir('temp/');
- return $this->tempPath.'temp/'.md5(uniqid(''));
+ return $this->tempPath . 'temp/' . md5(uniqid(''));
}
/**
* @param array Offset values in key 0/1
* @return array Modified $cords array
*/
- function applyOffset($cords,$OFFSET) {
- $cords[0] = intval($cords[0])+intval($OFFSET[0]);
- $cords[1] = intval($cords[1])+intval($OFFSET[1]);
+ function applyOffset($cords, $OFFSET) {
+ $cords[0] = intval($cords[0]) + intval($OFFSET[0]);
+ $cords[1] = intval($cords[1]) + intval($OFFSET[1]);
return $cords;
}
* @param string "HTML-color" data type string, eg. 'red', '#ffeedd' or '255,0,255'. You can also add a modifying operator afterwards. There are two options: "255,0,255 : 20" - will add 20 to values, result is "255,20,255". Or "255,0,255 : *1.23" which will multiply all RGB values with 1.23
* @return array RGB values in key 0/1/2 of the array
*/
- function convertColor($string) {
- $col=array();
- $cParts = explode(':',$string,2);
+ function convertColor($string) {
+ $col = array();
+ $cParts = explode(':', $string, 2);
// Finding the RGB definitions of the color:
- $string=$cParts[0];
- if (strstr($string,'#')) {
- $string = preg_replace('/[^A-Fa-f0-9]*/','',$string);
- $col[]=HexDec(substr($string,0,2));
- $col[]=HexDec(substr($string,2,2));
- $col[]=HexDec(substr($string,4,2));
- } elseif (strstr($string,',')) {
- $string = preg_replace('/[^,0-9]*/','',$string);
- $strArr = explode(',',$string);
- $col[]=intval($strArr[0]);
- $col[]=intval($strArr[1]);
- $col[]=intval($strArr[2]);
+ $string = $cParts[0];
+ if (strstr($string, '#')) {
+ $string = preg_replace('/[^A-Fa-f0-9]*/', '', $string);
+ $col[] = HexDec(substr($string, 0, 2));
+ $col[] = HexDec(substr($string, 2, 2));
+ $col[] = HexDec(substr($string, 4, 2));
+ } elseif (strstr($string, ',')) {
+ $string = preg_replace('/[^,0-9]*/', '', $string);
+ $strArr = explode(',', $string);
+ $col[] = intval($strArr[0]);
+ $col[] = intval($strArr[1]);
+ $col[] = intval($strArr[2]);
} else {
$string = strtolower(trim($string));
- if ($this->colMap[$string]) {
+ if ($this->colMap[$string]) {
$col = $this->colMap[$string];
} else {
- $col = Array(0,0,0);
+ $col = array(0, 0, 0);
}
}
// ... and possibly recalculating the value
- if (trim($cParts[1])) {
- $cParts[1]=trim($cParts[1]);
- if (substr($cParts[1],0,1)=='*') {
- $val=doubleval(substr($cParts[1],1));
- $col[0]=t3lib_div::intInRange($col[0]*$val,0,255);
- $col[1]=t3lib_div::intInRange($col[1]*$val,0,255);
- $col[2]=t3lib_div::intInRange($col[2]*$val,0,255);
+ if (trim($cParts[1])) {
+ $cParts[1] = trim($cParts[1]);
+ if (substr($cParts[1], 0, 1) == '*') {
+ $val = doubleval(substr($cParts[1], 1));
+ $col[0] = t3lib_utility_Math::forceIntegerInRange($col[0] * $val, 0, 255);
+ $col[1] = t3lib_utility_Math::forceIntegerInRange($col[1] * $val, 0, 255);
+ $col[2] = t3lib_utility_Math::forceIntegerInRange($col[2] * $val, 0, 255);
} else {
- $val=intval($cParts[1]);
- $col[0]=t3lib_div::intInRange($col[0]+$val,0,255);
- $col[1]=t3lib_div::intInRange($col[1]+$val,0,255);
- $col[2]=t3lib_div::intInRange($col[2]+$val,0,255);
+ $val = intval($cParts[1]);
+ $col[0] = t3lib_utility_Math::forceIntegerInRange($col[0] + $val, 0, 255);
+ $col[1] = t3lib_utility_Math::forceIntegerInRange($col[1] + $val, 0, 255);
+ $col[2] = t3lib_utility_Math::forceIntegerInRange($col[2] + $val, 0, 255);
}
}
return $col;
* @param string The text to recode
* @return string The recoded string. Should be UTF-8 output. MAY contain entities (eg. { or &#quot; which should render as real chars).
*/
- function recodeString($string) {
+ function recodeString($string) {
// Recode string to UTF-8 from $this->nativeCharset:
- if ($this->nativeCharset && $this->nativeCharset!='utf-8') {
- $string = $this->csConvObj->utf8_encode($string,$this->nativeCharset); // Convert to UTF-8
- }
-
- // Recode string accoding to TTFLocaleConv. Deprecated.
- if ($this->TTFLocaleConv) {
- t3lib_div::deprecationLog('The option $TYPO3_CONF_VARS[\'GFX\'][\'TTFLocaleConv\'] is in use, but deprecated since TYPO3 3.6, will be removed in TYPO3 4.6. Make sure to unset this variable in your typo3conf/localconf.php and use a different way to encode your string.');
-
- list($from, $to) = t3lib_div::trimExplode('..', $this->TTFLocaleConv, true);
- $string = $this->csConvObj->conv($string, $from, $to);
+ if ($this->nativeCharset && $this->nativeCharset != 'utf-8') {
+ $string = $this->csConvObj->utf8_encode($string, $this->nativeCharset); // Convert to UTF-8
}
return $string;
* @param boolean Return Unicode numbers instead of chars.
* @return array Numerical array with a char as each value.
*/
- function singleChars($theText,$returnUnicodeNumber=FALSE) {
- if ($this->nativeCharset) {
- return $this->csConvObj->utf8_to_numberarray($theText,1,$returnUnicodeNumber ? 0 : 1); // Get an array of separated UTF-8 chars
+ function singleChars($theText, $returnUnicodeNumber = FALSE) {
+ if ($this->nativeCharset) {
+ return $this->csConvObj->utf8_to_numberarray($theText, 1, $returnUnicodeNumber ? 0 : 1); // Get an array of separated UTF-8 chars
} else {
- $output=array();
- $c=strlen($theText);
- for($a=0;$a<$c;$a++) {
- $output[]=substr($theText,$a,1);
+ $output = array();
+ $c = strlen($theText);
+ for ($a = 0; $a < $c; $a++) {
+ $output[] = substr($theText, $a, 1);
}
return $output;
}
* @access private
* @see copyGifOntoGif(), makeBox(), crop()
*/
- function objPosition($conf,$workArea,$BB) {
+ function objPosition($conf, $workArea, $BB) {
// offset, align, valign, workarea
- $result=Array();
+ $result = array();
$result[2] = $BB[0];
$result[3] = $BB[1];
- $w=$workArea[2];
- $h=$workArea[3];
+ $w = $workArea[2];
+ $h = $workArea[3];
- $align = explode(',',$conf['align']);
- $align[0] = strtolower(substr(trim($align[0]),0,1));
- $align[1] = strtolower(substr(trim($align[1]),0,1));
+ $align = explode(',', $conf['align']);
+ $align[0] = strtolower(substr(trim($align[0]), 0, 1));
+ $align[1] = strtolower(substr(trim($align[1]), 0, 1));
- switch($align[0]) {
+ switch ($align[0]) {
case 'r':
- $result[0]=$w-$result[2];
+ $result[0] = $w - $result[2];
break;
case 'c':
- $result[0] = round(($w-$result[2])/2);
+ $result[0] = round(($w - $result[2]) / 2);
break;
default:
$result[0] = 0;
break;
}
- switch($align[1]) {
+ switch ($align[1]) {
case 'b':
- $result[1] = $h-$result[3]; // y pos
+ $result[1] = $h - $result[3]; // y pos
break;
case 'c':
- $result[1] = round(($h-$result[3])/2);
+ $result[1] = round(($h - $result[3]) / 2);
break;
default:
- $result[1]=0;
+ $result[1] = 0;
break;
}
- $result = $this->applyOffset($result,t3lib_div::intExplode(',',$conf['offset']));
- $result = $this->applyOffset($result,$workArea);
+ $result = $this->applyOffset($result, t3lib_div::intExplode(',', $conf['offset']));
+ $result = $this->applyOffset($result, $workArea);
return $result;
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
/***********************************
*
* Scaling, Dimensions of images
* @return array [0]/[1] is w/h, [2] is file extension and [3] is the filename.
* @see getImageScale(), typo3/show_item.php, fileList_ext::renderImage(), tslib_cObj::getImgResource(), SC_tslib_showpic::show(), maskImageOntoImage(), copyImageOntoImage(), scale()
*/
- function imageMagickConvert($imagefile,$newExt='',$w='',$h='',$params='',$frame='',$options='',$mustCreate=0) {
- if ($this->NO_IMAGE_MAGICK) {
+ function imageMagickConvert($imagefile, $newExt = '', $w = '', $h = '', $params = '', $frame = '', $options = '', $mustCreate = 0) {
+ if ($this->NO_IMAGE_MAGICK) {
// Returning file info right away
return $this->getImageDimensions($imagefile);
}
- if($info=$this->getImageDimensions($imagefile)) {
- $newExt=strtolower(trim($newExt));
- if (!$newExt) { // If no extension is given the original extension is used
+ if ($info = $this->getImageDimensions($imagefile)) {
+ $newExt = strtolower(trim($newExt));
+ if (!$newExt) { // If no extension is given the original extension is used
$newExt = $info[2];
}
- if ($newExt=='web') {
- if (t3lib_div::inList($this->webImageExt,$info[2])) {
+ if ($newExt == 'web') {
+ if (t3lib_div::inList($this->webImageExt, $info[2])) {
$newExt = $info[2];
} else {
- $newExt = $this->gif_or_jpg($info[2],$info[0],$info[1]);
- if (!$params) {
+ $newExt = $this->gif_or_jpg($info[2], $info[0], $info[1]);
+ if (!$params) {
$params = $this->cmds[$newExt];
}
}
}
- if (t3lib_div::inList($this->imageFileExt,$newExt)) {
- if (strstr($w.$h, 'm')) {$max=1;} else {$max=0;}
-
- $data = $this->getImageScale($info,$w,$h,$options);
- $w=$data['origW'];
- $h=$data['origH'];
-
- // if no convertion should be performed
- $wh_noscale = (!$w && !$h) || ($data[0]==$info[0] && $data[1]==$info[1]); // this flag is true if the width / height does NOT dictate the image to be scaled!! (that is if no w/h is given or if the destination w/h matches the original image-dimensions....
+ if (t3lib_div::inList($this->imageFileExt, $newExt)) {
+ if (strstr($w . $h, 'm')) {
+ $max = 1;
+ } else {
+ $max = 0;
+ }
- if ($wh_noscale && !$data['crs'] && !$params && !$frame && $newExt==$info[2] && !$mustCreate) {
+ $data = $this->getImageScale($info, $w, $h, $options);
+ $w = $data['origW'];
+ $h = $data['origH'];
+
+ // if no conversion should be performed
+ // this flag is TRUE if the width / height does NOT dictate
+ // the image to be scaled!! (that is if no width / height is
+ // given or if the destination w/h matches the original image
+ // dimensions or if the option to not scale the image is set)
+ $noScale = (!$w && !$h) || ($data[0] == $info[0] && $data[1] == $info[1]) || $options['noScale'];
+
+ if ($noScale && !$data['crs'] && !$params && !$frame && $newExt == $info[2] && !$mustCreate) {
+ // set the new width and height before returning,
+ // if the noScale option is set
+ if ($options['noScale']) {
+ $info[0] = $data[0];
+ $info[1] = $data[1];
+ }
$info[3] = $imagefile;
return $info;
}
- $info[0]=$data[0];
- $info[1]=$data[1];
+ $info[0] = $data[0];
+ $info[1] = $data[1];
$frame = $this->noFramePrepended ? '' : intval($frame);
- if (!$params) {
+ if (!$params) {
$params = $this->cmds[$newExt];
}
// Cropscaling:
if ($data['crs']) {
- if (!$data['origW']) { $data['origW'] = $data[0]; }
- if (!$data['origH']) { $data['origH'] = $data[1]; }
- $offsetX = intval(($data[0] - $data['origW']) * ($data['cropH']+100)/200);
- $offsetY = intval(($data[1] - $data['origH']) * ($data['cropV']+100)/200);
- $params .= ' -crop '.$data['origW'].'x'.$data['origH'].'+'.$offsetX.'+'.$offsetY.' ';
+ if (!$data['origW']) {
+ $data['origW'] = $data[0];
+ }
+ if (!$data['origH']) {
+ $data['origH'] = $data[1];
+ }
+ $offsetX = intval(($data[0] - $data['origW']) * ($data['cropH'] + 100) / 200);
+ $offsetY = intval(($data[1] - $data['origH']) * ($data['cropV'] + 100) / 200);
+ $params .= ' -crop ' . $data['origW'] . 'x' . $data['origH'] . '+' . $offsetX . '+' . $offsetY . ' ';
}
- $command = $this->scalecmd.' '.$info[0].'x'.$info[1].'! '.$params.' ';
- $cropscale = ($data['crs'] ? 'crs-V'.$data['cropV'].'H'.$data['cropH'] : '');
+ $command = $this->scalecmd . ' ' . $info[0] . 'x' . $info[1] . '! ' . $params . ' ';
+ $cropscale = ($data['crs'] ? 'crs-V' . $data['cropV'] . 'H' . $data['cropH'] : '');
- if ($this->alternativeOutputKey) {
- $theOutputName = t3lib_div::shortMD5($command.$cropscale.basename($imagefile).$this->alternativeOutputKey.'['.$frame.']');
+ if ($this->alternativeOutputKey) {
+ $theOutputName = t3lib_div::shortMD5($command . $cropscale . basename($imagefile) . $this->alternativeOutputKey . '[' . $frame . ']');
} else {
- $theOutputName = t3lib_div::shortMD5($command.$cropscale.$imagefile.filemtime($imagefile).'['.$frame.']');
+ $theOutputName = t3lib_div::shortMD5($command . $cropscale . $imagefile . filemtime($imagefile) . '[' . $frame . ']');
}
- if ($this->imageMagickConvert_forceFileNameBody) {
+ if ($this->imageMagickConvert_forceFileNameBody) {
$theOutputName = $this->imageMagickConvert_forceFileNameBody;
- $this->imageMagickConvert_forceFileNameBody='';
+ $this->imageMagickConvert_forceFileNameBody = '';
}
// Making the temporary filename:
$this->createTempSubDir('pics/');
- $output = $this->absPrefix.$this->tempPath.'pics/'.$this->filenamePrefix.$theOutputName.'.'.$newExt;
+ $output = $this->absPrefix . $this->tempPath . 'pics/' . $this->filenamePrefix . $theOutputName . '.' . $newExt;
// Register temporary filename:
$GLOBALS['TEMP_IMAGES_ON_PAGE'][] = $output;
- if ($this->dontCheckForExistingTempFile || !$this->file_exists_typo3temp_file($output, $imagefile)) {
+ if ($this->dontCheckForExistingTempFile || !$this->file_exists_typo3temp_file($output, $imagefile)) {
$this->imageMagickExec($imagefile, $output, $command, $frame);
}
- if (file_exists($output)) {
+ if (file_exists($output)) {
$info[3] = $output;
$info[2] = $newExt;
- if ($params) { // params could realisticly change some imagedata!
- $info=$this->getImageDimensions($info[3]);
+ if ($params) { // params could realisticly change some imagedata!
+ $info = $this->getImageDimensions($info[3]);
}
- if ($info[2]==$this->gifExtension && !$this->dontCompress) {
- t3lib_div::gif_compress($info[3],''); // Compress with IM (lzw) or GD (rle) (Workaround for the absence of lzw-compression in GD)
+ if ($info[2] == $this->gifExtension && !$this->dontCompress) {
+ t3lib_div::gif_compress($info[3], ''); // Compress with IM (lzw) or GD (rle) (Workaround for the absence of lzw-compression in GD)
}
return $info;
}
* @return array Returns an array where [0]/[1] is w/h, [2] is extension and [3] is the filename.
* @see imageMagickConvert(), tslib_cObj::getImgResource()
*/
- function getImageDimensions($imageFile) {
- preg_match('/([^\.]*)$/',$imageFile,$reg);
- if (file_exists($imageFile) && t3lib_div::inList($this->imageFileExt,strtolower($reg[0]))) {
- if ($returnArr = $this->getCachedImageDimensions($imageFile)) {
+ function getImageDimensions($imageFile) {
+ preg_match('/([^\.]*)$/', $imageFile, $reg);
+ if (file_exists($imageFile) && t3lib_div::inList($this->imageFileExt, strtolower($reg[0]))) {
+ if ($returnArr = $this->getCachedImageDimensions($imageFile)) {
return $returnArr;
} else {
- if ($temp = @getImageSize($imageFile)) {
- $returnArr = Array($temp[0], $temp[1], strtolower($reg[0]), $imageFile);
+ if ($temp = @getImageSize($imageFile)) {
+ $returnArr = array($temp[0], $temp[1], strtolower($reg[0]), $imageFile);
} else {
$returnArr = $this->imageMagickIdentify($imageFile);
}
}
}
}
- return false;
+ return FALSE;
}
/**
* file exists!
*
* @param array $identifyResult: Result of the getImageDimensions function
- * @return boolean True if operation was successful
+ * @return boolean TRUE if operation was successful
* @author Michael Stucki <michael@typo3.org> / Robert Lemke <rl@robertlemke.de>
*/
- function cacheImageDimensions($identifyResult) {
- global $TYPO3_DB;
- // Create a md5 hash of the filename
- $md5Hash = md5_file($identifyResult[3]);
+ function cacheImageDimensions($identifyResult) {
+ // Create md5 hash of filemtime and filesize
+ $md5Hash = md5(filemtime($identifyResult[3]) . filesize($identifyResult[3]));
+
+ $result = FALSE;
if ($md5Hash) {
- $fieldArr = array (
+ $fieldArray = array(
'md5hash' => $md5Hash,
'md5filename' => md5($identifyResult[3]),
'tstamp' => $GLOBALS['EXEC_TIME'],
'imagewidth' => $identifyResult[0],
'imageheight' => $identifyResult[1],
);
- $TYPO3_DB->exec_INSERTquery('cache_imagesizes', $fieldArr);
- if (!$err = $TYPO3_DB->sql_error()) {
- return true;
+
+ $GLOBALS['TYPO3_DB']->exec_INSERTquery(
+ 'cache_imagesizes',
+ $fieldArray
+ );
+
+ if (!$err = $GLOBALS['TYPO3_DB']->sql_error()) {
+ $result = TRUE;
}
}
- return false;
+
+ return $result;
}
/**
*
* @param string The image filepath
* @return array Returns an array where [0]/[1] is w/h, [2] is extension and [3] is the filename.
- * @author Michael Stucki <michael@typo3.org> / Robert Lemke <rl@robertlemke.de>
+ * @author Michael Stucki <michael@typo3.org>
+ * @author Robert Lemke <rl@robertlemke.de>
*/
- function getCachedImageDimensions($imageFile) {
- global $TYPO3_DB;
- // Create a md5 hash of the filename
- $md5Hash = md5_file($imageFile);
- preg_match('/([^\.]*)$/',$imageFile,$reg);
- $res = $TYPO3_DB->exec_SELECTquery ('md5hash, imagewidth, imageheight', 'cache_imagesizes', 'md5filename='.$TYPO3_DB->fullQuoteStr(md5($imageFile),'cache_imagesizes'));
- if ($res) {
- if ($row = $TYPO3_DB->sql_fetch_assoc($res)) {
- if ($row['md5hash']!=$md5Hash) {
- // file has changed, delete the row
- $TYPO3_DB->exec_DELETEquery ('cache_imagesizes', 'md5hash='.$TYPO3_DB->fullQuoteStr($row['md5hash'],'cache_imagesizes'));
- } else {
- return (array((int) $row['imagewidth'], (int) $row['imageheight'], strtolower($reg[0]), $imageFile));
- }
+ function getCachedImageDimensions($imageFile) {
+ // Create md5 hash of filemtime and filesize
+ $md5Hash = md5(filemtime($imageFile) . filesize($imageFile));
+
+ $cachedImageDimensions = $GLOBALS['TYPO3_DB']->exec_SELECTgetSingleRow(
+ 'md5hash, md5filename, imagewidth, imageheight',
+ 'cache_imagesizes',
+ 'md5filename=' . $GLOBALS['TYPO3_DB']->fullQuoteStr(md5($imageFile), 'cache_imagesizes')
+ );
+
+ $result = FALSE;
+ if (is_array($cachedImageDimensions)) {
+ if ($cachedImageDimensions['md5hash'] != $md5Hash) {
+ // File has changed, delete the row
+ $GLOBALS['TYPO3_DB']->exec_DELETEquery(
+ 'cache_imagesizes',
+ 'md5filename=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($cachedImageDimensions['md5filename'], 'cache_imagesizes')
+ );
+ } else {
+ preg_match('/([^\.]*)$/', $imageFile, $imageExtension);
+ $result = array(
+ (int)$cachedImageDimensions['imagewidth'],
+ (int)$cachedImageDimensions['imageheight'],
+ strtolower($imageExtension[0]),
+ $imageFile,
+ );
}
}
- return false;
+
+ return $result;
}
/**
* @access private
* @see imageMagickConvert()
*/
- function getImageScale($info,$w,$h,$options) {
- if (strstr($w.$h, 'm')) {$max=1;} else {$max=0;}
+ function getImageScale($info, $w, $h, $options) {
+ if (strstr($w . $h, 'm')) {
+ $max = 1;
+ } else {
+ $max = 0;
+ }
- if (strstr($w.$h, 'c')) {
+ if (strstr($w . $h, 'c')) {
$out['cropH'] = intval(substr(strstr($w, 'c'), 1));
$out['cropV'] = intval(substr(strstr($h, 'c'), 1));
- $crs = true;
+ $crs = TRUE;
} else {
- $crs = false;
+ $crs = FALSE;
}
$out['crs'] = $crs;
- $w=intval($w);
- $h=intval($h);
+ $w = intval($w);
+ $h = intval($h);
// if there are max-values...
- if ($options['maxW']) {
- if ($w) { // if width is given...
- if ($w>$options['maxW']) {
- $w=$options['maxW'];
- $max=1; // height should follow
+ if ($options['maxW']) {
+ if ($w) { // if width is given...
+ if ($w > $options['maxW']) {
+ $w = $options['maxW'];
+ $max = 1; // height should follow
}
} else {
- if ($info[0]>$options['maxW']) {
- $w=$options['maxW'];
- $max=1; // height should follow
+ if ($info[0] > $options['maxW']) {
+ $w = $options['maxW'];
+ $max = 1; // height should follow
}
}
}
- if ($options['maxH']) {
- if ($h) { // if height is given...
- if ($h>$options['maxH']) {
- $h=$options['maxH'];
- $max=1; // height should follow
+ if ($options['maxH']) {
+ if ($h) { // if height is given...
+ if ($h > $options['maxH']) {
+ $h = $options['maxH'];
+ $max = 1; // height should follow
}
} else {
- if ($info[1]>$options['maxH']) { // Changed [0] to [1] 290801
- $h=$options['maxH'];
- $max=1; // height should follow
+ if ($info[1] > $options['maxH']) { // Changed [0] to [1] 290801
+ $h = $options['maxH'];
+ $max = 1; // height should follow
}
}
}
- $out['origW']=$w;
- $out['origH']=$h;
+ $out['origW'] = $w;
+ $out['origH'] = $h;
$out['max'] = $max;
if (!$this->mayScaleUp) {
- if ($w>$info[0]){$w=$info[0];}
- if ($h>$info[1]){$h=$info[1];}
+ if ($w > $info[0]) {
+ $w = $info[0];
+ }
+ if ($h > $info[1]) {
+ $h = $info[1];
+ }
}
- if ($w || $h) { // if scaling should be performed
- if ($w && !$h) {
- $info[1] = ceil($info[1]*($w/$info[0]));
+ if ($w || $h) { // if scaling should be performed
+ if ($w && !$h) {
+ $info[1] = ceil($info[1] * ($w / $info[0]));
$info[0] = $w;
}
- if (!$w && $h) {
- $info[0] = ceil($info[0]*($h/$info[1]));
+ if (!$w && $h) {
+ $info[0] = ceil($info[0] * ($h / $info[1]));
$info[1] = $h;
}
- if ($w && $h) {
- if ($max) {
- $ratio = $info[0]/$info[1];
- if ($h*$ratio > $w) {
- $h = round($w/$ratio);
+ if ($w && $h) {
+ if ($max) {
+ $ratio = $info[0] / $info[1];
+ if ($h * $ratio > $w) {
+ $h = round($w / $ratio);
} else {
- $w = round($h*$ratio);
+ $w = round($h * $ratio);
}
}
- if ($crs) {
+ if ($crs) {
$ratio = $info[0] / $info[1];
if ($h * $ratio < $w) {
$h = round($w / $ratio);
$info[1] = $h;
}
}
- $out[0]=$info[0];
- $out[1]=$info[1];
+ $out[0] = $info[0];
+ $out[1] = $info[1];
// Set minimum-measures!
- if ($options['minW'] && $out[0]<$options['minW']) {
- if (($max || $crs) && $out[0]) {
- $out[1]= round($out[1]*$options['minW']/$out[0]);
+ if ($options['minW'] && $out[0] < $options['minW']) {
+ if (($max || $crs) && $out[0]) {
+ $out[1] = round($out[1] * $options['minW'] / $out[0]);
}
- $out[0]=$options['minW'];
+ $out[0] = $options['minW'];
}
- if ($options['minH'] && $out[1]<$options['minH']) {
- if (($max || $crs) && $out[1]) {
- $out[0]= round($out[0]*$options['minH']/$out[1]);
+ if ($options['minH'] && $out[1] < $options['minH']) {
+ if (($max || $crs) && $out[1]) {
+ $out[0] = round($out[0] * $options['minH'] / $out[1]);
}
- $out[1]=$options['minH'];
+ $out[1] = $options['minH'];
}
return $out;
*
* @param string Output imagefile
* @param string Original basis file
- * @return boolean Returns true if the file is already being made; thus "true" means "Don't render the image again"
+ * @return boolean Returns TRUE if the file is already being made; thus "TRUE" means "Don't render the image again"
* @access private
*/
- function file_exists_typo3temp_file($output,$orig='') {
- if ($this->enable_typo3temp_db_tracking) {
- if (file_exists($output)) { // If file exists, then we return immediately
+ function file_exists_typo3temp_file($output, $orig = '') {
+ if ($this->enable_typo3temp_db_tracking) {
+ if (file_exists($output)) { // If file exists, then we return immediately
return 1;
- } else { // If not, we look up in the cache_typo3temp_log table to see if there is a image being rendered right now.
- $md5Hash=md5($output);
+ } else { // If not, we look up in the cache_typo3temp_log table to see if there is a image being rendered right now.
+ $md5Hash = md5($output);
$res = $GLOBALS['TYPO3_DB']->exec_SELECTquery(
'md5hash',
'cache_typo3temp_log',
'md5hash=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($md5Hash, 'cache_typo3temp_log') . ' AND tstamp>' . ($GLOBALS['EXEC_TIME'] - 30)
);
- if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { // If there was a record, the image is being generated by another proces (we assume)
- if (is_object($GLOBALS['TSFE'])) $GLOBALS['TSFE']->set_no_cache(); // ...so we set no_cache, because we dont want this page (which will NOT display an image...!) to be cached! (Only a page with the correct image on...)
- if (is_object($GLOBALS['TT'])) $GLOBALS['TT']->setTSlogMessage('typo3temp_log: Assume this file is being rendered now: '.$output);
- return 2; // Return 'success - 2'
- } else { // If the current time is more than 30 seconds since this record was written, we clear the record, write a new and render the image.
+ if ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) { // If there was a record, the image is being generated by another proces (we assume)
+ if (is_object($GLOBALS['TSFE'])) {
+ $GLOBALS['TSFE']->set_no_cache();
+ } // ...so we set no_cache, because we dont want this page (which will NOT display an image...!) to be cached! (Only a page with the correct image on...)
+ if (is_object($GLOBALS['TT'])) {
+ $GLOBALS['TT']->setTSlogMessage('typo3temp_log: Assume this file is being rendered now: ' . $output);
+ }
+ return 2; // Return 'success - 2'
+ } else { // If the current time is more than 30 seconds since this record was written, we clear the record, write a new and render the image.
$insertFields = array(
'md5hash' => $md5Hash,
'filename' => $output,
'orig_filename' => $orig
);
- $GLOBALS['TYPO3_DB']->exec_DELETEquery('cache_typo3temp_log', 'md5hash='.$GLOBALS['TYPO3_DB']->fullQuoteStr($md5Hash, 'cache_typo3temp_log'));
+ $GLOBALS['TYPO3_DB']->exec_DELETEquery('cache_typo3temp_log', 'md5hash=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($md5Hash, 'cache_typo3temp_log'));
$GLOBALS['TYPO3_DB']->exec_INSERTquery('cache_typo3temp_log', $insertFields);
- if (is_object($GLOBALS['TT'])) $GLOBALS['TT']->setTSlogMessage('typo3temp_log: The row did not exist, so a new is written and file is being processed: '.$output);
+ if (is_object($GLOBALS['TT'])) {
+ $GLOBALS['TT']->setTSlogMessage('typo3temp_log: The row did not exist, so a new is written and file is being processed: ' . $output);
+ }
return 0;
}
}
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
/***********************************
*
* ImageMagick API functions
* @param string The relative (to PATH_site) image filepath
* @return array
*/
- function imageMagickIdentify($imagefile) {
- if (!$this->NO_IMAGE_MAGICK) {
- $frame = $this->noFramePrepended?'':'[0]';
- $cmd = t3lib_div::imageMagickCommand('identify', $this->wrapFileName($imagefile).$frame);
+ function imageMagickIdentify($imagefile) {
+ if (!$this->NO_IMAGE_MAGICK) {
+ $frame = $this->noFramePrepended ? '' : '[0]';
+ $cmd = t3lib_div::imageMagickCommand('identify', $this->wrapFileName($imagefile) . $frame);
$returnVal = array();
- exec($cmd, $returnVal);
- $splitstring=$returnVal[0];
- $this->IM_commands[] = Array ('identify',$cmd,$returnVal[0]);
- if ($splitstring) {
- preg_match('/([^\.]*)$/',$imagefile,$reg);
+ t3lib_utility_Command::exec($cmd, $returnVal);
+ $splitstring = $returnVal[0];
+ $this->IM_commands[] = array('identify', $cmd, $returnVal[0]);
+ if ($splitstring) {
+ preg_match('/([^\.]*)$/', $imagefile, $reg);
$splitinfo = explode(' ', $splitstring);
foreach ($splitinfo as $key => $val) {
$temp = '';
- if ($val) {$temp = explode('x', $val);}
- if (intval($temp[0]) && intval($temp[1])) {
- $dim=$temp;
+ if ($val) {
+ $temp = explode('x', $val);
+ }
+ if (intval($temp[0]) && intval($temp[1])) {
+ $dim = $temp;
break;
}
}
- if ($dim[0] && $dim[1]) {
- return Array($dim[0], $dim[1], strtolower($reg[0]), $imagefile);
+ if ($dim[0] && $dim[1]) {
+ return array($dim[0], $dim[1], strtolower($reg[0]), $imagefile);
}
}
}
}
$cmd = t3lib_div::imageMagickCommand('convert', $params . ' ' . $this->wrapFileName($input) . $frame . ' ' . $this->wrapFileName($output));
- $this->IM_commands[] = array($output,$cmd);
+ $this->IM_commands[] = array($output, $cmd);
- $ret = exec($cmd);
- t3lib_div::fixPermissions($output); // Change the permissions of the file
+ $ret = t3lib_utility_Command::exec($cmd);
+ t3lib_div::fixPermissions($output); // Change the permissions of the file
return $ret;
}
* @param [type] $handleNegation: ...
* @return void
*/
- function combineExec($input,$overlay,$mask,$output, $handleNegation = false) {
- if (!$this->NO_IMAGE_MAGICK) {
+ function combineExec($input, $overlay, $mask, $output, $handleNegation = FALSE) {
+ if (!$this->NO_IMAGE_MAGICK) {
$params = '-colorspace GRAY +matte';
- if ($handleNegation) {
- if ($this->maskNegate) {
- $params .= ' '.$this->maskNegate;
+ if ($handleNegation) {
+ if ($this->maskNegate) {
+ $params .= ' ' . $this->maskNegate;
}
}
- $theMask = $this->randomName().'.'.$this->gifExtension;
+ $theMask = $this->randomName() . '.' . $this->gifExtension;
$this->imageMagickExec($mask, $theMask, $params);
- $cmd = t3lib_div::imageMagickCommand('combine', '-compose over +matte '.$this->wrapFileName($input).' '.$this->wrapFileName($overlay).' '.$this->wrapFileName($theMask).' '.$this->wrapFileName($output)); // +matte = no alpha layer in output
- $this->IM_commands[] = Array ($output,$cmd);
+ $cmd = t3lib_div::imageMagickCommand('combine', '-compose over +matte ' . $this->wrapFileName($input) . ' ' . $this->wrapFileName($overlay) . ' ' . $this->wrapFileName($theMask) . ' ' . $this->wrapFileName($output)); // +matte = no alpha layer in output
+ $this->IM_commands[] = array($output, $cmd);
- $ret = exec($cmd);
- t3lib_div::fixPermissions($output); // Change the permissions of the file
+ $ret = t3lib_utility_Command::exec($cmd);
+ t3lib_div::fixPermissions($output); // Change the permissions of the file
- if (is_file($theMask)) {
+ if (is_file($theMask)) {
@unlink($theMask);
}
* @return string $inputName escaped as needed
*/
protected function wrapFileName($inputName) {
- return escapeshellarg($inputName);
+ if ($GLOBALS['TYPO3_CONF_VARS']['SYS']['UTF8filesystem']) {
+ $currentLocale = setlocale(LC_CTYPE, 0);
+ setlocale(LC_CTYPE, $GLOBALS['TYPO3_CONF_VARS']['SYS']['systemLocale']);
+ }
+ $escapedInputName = escapeshellarg($inputName);
+ if ($GLOBALS['TYPO3_CONF_VARS']['SYS']['UTF8filesystem']) {
+ setlocale(LC_CTYPE, $currentLocale);
+ }
+ return $escapedInputName;
}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
/***********************************
*
* Various IO functions
***********************************/
/**
- * Returns true if the input file existed
+ * Returns TRUE if the input file existed
*
* @param string Input file to check
* @return string Returns the filename if the file existed, otherwise empty.
*/
- function checkFile($file) {
- if (@is_file($file)) {
+ function checkFile($file) {
+ if (@is_file($file)) {
return $file;
} else {
return '';
* Creates subdirectory in typo3temp/ if not already found.
*
* @param string Name of sub directory
- * @return boolean Result of t3lib_div::mkdir(), true if it went well.
+ * @return boolean Result of t3lib_div::mkdir(), TRUE if it went well.
*/
- function createTempSubDir($dirName) {
+ function createTempSubDir($dirName) {
// Checking if the this->tempPath is already prefixed with PATH_site and if not, prefix it with that constant.
- if (t3lib_div::isFirstPartOfStr($this->tempPath,PATH_site)) {
+ if (t3lib_div::isFirstPartOfStr($this->tempPath, PATH_site)) {
$tmpPath = $this->tempPath;
} else {
- $tmpPath = PATH_site.$this->tempPath;
+ $tmpPath = PATH_site . $this->tempPath;
}
// Making the temporary filename:
- if (!@is_dir($tmpPath.$dirName)) {
- return t3lib_div::mkdir($tmpPath.$dirName);
+ if (!@is_dir($tmpPath . $dirName)) {
+ return t3lib_div::mkdir($tmpPath . $dirName);
}
}
* @param string The ImageMagick parameters. Like effects, scaling etc.
* @return void
*/
- function applyImageMagickToPHPGif(&$im, $command) {
+ function applyImageMagickToPHPGif(&$im, $command) {
$tmpStr = $this->randomName();
- $theFile = $tmpStr.'.'.$this->gifExtension;
+ $theFile = $tmpStr . '.' . $this->gifExtension;
$this->ImageWrite($im, $theFile);
- $this->imageMagickExec($theFile,$theFile,$command);
+ $this->imageMagickExec($theFile, $theFile, $command);
$tmpImg = $this->imageCreateFromFile($theFile);
- if ($tmpImg) {
+ if ($tmpImg) {
ImageDestroy($im);
$im = $tmpImg;
$this->w = imagesx($im);
$this->h = imagesy($im);
}
- if (!$this->dontUnlinkTempFiles) {
+ if (!$this->dontUnlinkTempFiles) {
unlink($theFile);
}
}
* @param integer The height of the output image.
* @return string The filename, either "jpg" or "gif"/"png" (whatever $this->gifExtension is set to.)
*/
- function gif_or_jpg($type,$w,$h) {
- if ($type=='ai' || $w*$h < $this->pixelLimitGif) {
+ function gif_or_jpg($type, $w, $h) {
+ if ($type == 'ai' || $w * $h < $this->pixelLimitGif) {
return $this->gifExtension;
} else {
return 'jpg';
* @return string Returns input filename
* @see tslib_gifBuilder::gifBuild()
*/
- function output($file) {
- if ($file) {
+ function output($file) {
+ if ($file) {
$reg = array();
- preg_match('/([^\.]*)$/',$file,$reg);
- $ext=strtolower($reg[0]);
- switch($ext) {
+ preg_match('/([^\.]*)$/', $file, $reg);
+ $ext = strtolower($reg[0]);
+ switch ($ext) {
case 'gif':
case 'png':
- if ($this->ImageWrite($this->im, $file)) {
+ if ($this->ImageWrite($this->im, $file)) {
// ImageMagick operations
if ($this->setup['reduceColors'] || !$this->png_truecolor) {
- $reduced = $this->IMreduceColors($file, t3lib_div::intInRange($this->setup['reduceColors'], 256, $this->truecolorColors, 256));
- if ($reduced) {
+ $reduced = $this->IMreduceColors($file, t3lib_utility_Math::forceIntegerInRange($this->setup['reduceColors'], 256, $this->truecolorColors, 256));
+ if ($reduced) {
@copy($reduced, $file);
@unlink($reduced);
}
}
- t3lib_div::gif_compress($file, 'IM'); // Compress with IM! (adds extra compression, LZW from ImageMagick) (Workaround for the absence of lzw-compression in GD)
+ t3lib_div::gif_compress($file, 'IM'); // Compress with IM! (adds extra compression, LZW from ImageMagick) (Workaround for the absence of lzw-compression in GD)
}
break;
case 'jpg':
case 'jpeg':
- $quality = 0; // Use the default
- if($this->setup['quality']) {
- $quality = t3lib_div::intInRange($this->setup['quality'],10,100);
+ $quality = 0; // Use the default
+ if ($this->setup['quality']) {
+ $quality = t3lib_utility_Math::forceIntegerInRange($this->setup['quality'], 10, 100);
+ }
+ if ($this->ImageWrite($this->im, $file, $quality)) {
+ ;
}
- if ($this->ImageWrite($this->im, $file, $quality));
break;
}
- $GLOBALS['TEMP_IMAGES_ON_PAGE'][]=$file;
+ $GLOBALS['TEMP_IMAGES_ON_PAGE'][] = $file;
}
return $file;
}
* @return void
* @see tslib_gifBuilder::gifBuild()
*/
- function destroy() {
+ function destroy() {
ImageDestroy($this->im);
}
* @param array Image information array, key 0/1 is width/height and key 3 is the src value
* @return string Image tag for the input image information array.
*/
- function imgTag ($imgInfo) {
- return '<img src="'.$imgInfo[3].'" width="'.$imgInfo[0].'" height="'.$imgInfo[1].'" border="0" alt="" />';
+ function imgTag($imgInfo) {
+ return '<img src="' . $imgInfo[3] . '" width="' . $imgInfo[0] . '" height="' . $imgInfo[1] . '" border="0" alt="" />';
}
/**
* @return boolean The output of either imageGif, imagePng or imageJpeg based on the filename to write
* @see maskImageOntoImage(), scale(), output()
*/
- function ImageWrite($destImg, $theImage, $quality=0) {
- imageinterlace ($destImg,0);
- $ext = strtolower(substr($theImage, strrpos($theImage, '.')+1));
+ function ImageWrite($destImg, $theImage, $quality = 0) {
+ imageinterlace($destImg, 0);
+ $ext = strtolower(substr($theImage, strrpos($theImage, '.') + 1));
$result = FALSE;
- switch ($ext) {
+ switch ($ext) {
case 'jpg':
case 'jpeg':
- if (function_exists('imageJpeg')) {
- if ($quality == 0) {
+ if (function_exists('imageJpeg')) {
+ if ($quality == 0) {
$quality = $this->jpegQuality;
}
$result = imageJpeg($destImg, $theImage, $quality);
break;
case 'gif':
if (function_exists('imageGif')) {
- imagetruecolortopalette($destImg, true, 256);
+ imagetruecolortopalette($destImg, TRUE, 256);
$result = imageGif($destImg, $theImage);
}
break;
case 'png':
- if (function_exists('imagePng')) {
+ if (function_exists('imagePng')) {
$result = ImagePng($destImg, $theImage);
}
break;
return $result;
}
-
-
- /**
- * Writes the input GDlib image pointer to file. Now just a wrapper to ImageWrite.
- *
- * @param pointer The GDlib image resource pointer
- * @param string The filename to write to
- * @return mixed The output of either imageGif, imagePng or imageJpeg based on the filename to write
- * @see imageWrite()
- * @deprecated since TYPO3 4.0, this function will be removed in TYPO3 4.5.
- */
- function imageGif($destImg, $theImage) {
- t3lib_div::logDeprecatedFunction();
-
- return $this->imageWrite($destImg, $theImage);
- }
-
- /**
- * This function has been renamed and only exists for providing backwards compatibility.
- * Please use $this->imageCreateFromFile() instead.
- *
- * @param string Image filename
- * @return pointer Image Resource pointer
- * @deprecated since TYPO3 4.0, this function will be removed in TYPO3 4.5.
- */
- function imageCreateFromGif($sourceImg) {
- t3lib_div::logDeprecatedFunction();
-
- return $this->imageCreateFromFile($sourceImg);
- }
-
/**
* Creates a new GDlib image resource based on the input image filename.
* If it fails creating a image from the input file a blank gray image with the dimensions of the input image will be created instead.
* @param string Image filename
* @return pointer Image Resource pointer
*/
- function imageCreateFromFile($sourceImg) {
+ function imageCreateFromFile($sourceImg) {
$imgInf = pathinfo($sourceImg);
$ext = strtolower($imgInf['extension']);
- switch ($ext) {
+ switch ($ext) {
case 'gif':
- if (function_exists('imagecreatefromgif')) {
+ if (function_exists('imagecreatefromgif')) {
return imageCreateFromGif($sourceImg);
}
break;
case 'png':
- if (function_exists('imagecreatefrompng')) {
+ if (function_exists('imagecreatefrompng')) {
return imageCreateFromPng($sourceImg);
}
break;
case 'jpg':
case 'jpeg':
- if (function_exists('imagecreatefromjpeg')) {
+ if (function_exists('imagecreatefromjpeg')) {
return imageCreateFromJpeg($sourceImg);
}
break;
}
- // If non of the above:
+ // If non of the above:
$i = @getimagesize($sourceImg);
$im = imagecreatetruecolor($i[0], $i[1]);
- $Bcolor = ImageColorAllocate($im, 128,128,128);
+ $Bcolor = ImageColorAllocate($im, 128, 128, 128);
ImageFilledRectangle($im, 0, 0, $i[0], $i[1], $Bcolor);
return $im;
}
-
- /**
- * Creates a new GD image resource.
- * Wrapper for imagecreate(truecolor) depended if GD2 is used.
- * This function however got obsolete, as PHP now recommends to use
- * imagecreatetruecolor() only.
- *
- * @param integer Width of image
- * @param integer Height of image
- * @return pointer Image Resource pointer
- * @deprecated since TYPO3 4.4, this function will be removed in TYPO3 4.6.
- */
- function imagecreate($w, $h) {
- t3lib_div::logDeprecatedFunction();
-
- return imagecreatetruecolor($w, $h);
- }
-
/**
* Returns the HEX color value for an RGB color array
*
* @param array RGB color array
* @return string HEX color value
*/
- function hexColor($col) {
+ function hexColor($col) {
$r = dechex($col[0]);
- if (strlen($r)<2) { $r = '0'.$r; }
+ if (strlen($r) < 2) {
+ $r = '0' . $r;
+ }
$g = dechex($col[1]);
- if (strlen($g)<2) { $g = '0'.$g; }
+ if (strlen($g) < 2) {
+ $g = '0' . $g;
+ }
$b = dechex($col[2]);
- if (strlen($b)<2) { $b = '0'.$b; }
- return '#'.$r.$g.$b;
+ if (strlen($b) < 2) {
+ $b = '0' . $b;
+ }
+ return '#' . $r . $g . $b;
}
/**
* @param [type] $closest: ...
* @return integer The index of the unified color
*/
- function unifyColors(&$img, $colArr, $closest = false) {
+ function unifyColors(&$img, $colArr, $closest = FALSE) {
$retCol = -1;
- if (is_array($colArr) && count($colArr) && function_exists('imagepng') && function_exists('imagecreatefrompng')) {
+ if (is_array($colArr) && count($colArr) && function_exists('imagepng') && function_exists('imagecreatefrompng')) {
$firstCol = array_shift($colArr);
$firstColArr = $this->convertColor($firstCol);
- if (count($colArr)>1) {
- $origName = $preName = $this->randomName().'.png';
- $postName = $this->randomName().'.png';
+ if (count($colArr) > 1) {
+ $origName = $preName = $this->randomName() . '.png';
+ $postName = $this->randomName() . '.png';
$this->imageWrite($img, $preName);
$firstCol = $this->hexColor($firstColArr);
- foreach ($colArr as $transparentColor) {
+ foreach ($colArr as $transparentColor) {
$transparentColor = $this->convertColor($transparentColor);
$transparentColor = $this->hexColor($transparentColor);
- $cmd = '-fill "'.$firstCol.'" -opaque "'.$transparentColor.'"';
+ $cmd = '-fill "' . $firstCol . '" -opaque "' . $transparentColor . '"';
$this->imageMagickExec($preName, $postName, $cmd);
$preName = $postName;
}
$this->imageMagickExec($postName, $origName, '');
- if (@is_file($origName)) {
+ if (@is_file($origName)) {
$tmpImg = $this->imageCreateFromFile($origName);
}
- } else {
+ } else {
$tmpImg = $img;
}
- if ($tmpImg) {
+ if ($tmpImg) {
$img = $tmpImg;
- if ($closest) {
- $retCol = ImageColorClosest ($img, $firstColArr[0], $firstColArr[1], $firstColArr[2]);
- } else {
- $retCol = ImageColorExact ($img, $firstColArr[0], $firstColArr[1], $firstColArr[2]);
+ if ($closest) {
+ $retCol = ImageColorClosest($img, $firstColArr[0], $firstColArr[1], $firstColArr[2]);
+ } else {
+ $retCol = ImageColorExact($img, $firstColArr[0], $firstColArr[1], $firstColArr[2]);
}
}
// unlink files from process
- if (!$this->dontUnlinkTempFiles) {
- if ($origName) {
+ if (!$this->dontUnlinkTempFiles) {
+ if ($origName) {
@unlink($origName);
}
- if ($postName) {
+ if ($postName) {
@unlink($postName);
}
}
}
-if (defined('TYPO3_MODE') && $TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_stdgraphic.php']) {
- include_once($TYPO3_CONF_VARS[TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_stdgraphic.php']);
+if (defined('TYPO3_MODE') && isset($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_stdgraphic.php'])) {
+ include_once($GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']['t3lib/class.t3lib_stdgraphic.php']);
}
?>
\ No newline at end of file