芝麻web文件管理V1.00
编辑当前文件:/home/strato/chroot/opt/RZphp81/includes/XML/image2svg.php
| // +----------------------------------------------------------------------+ // // $Id: image2svg.php,v 1.1 2002/05/01 21:31:37 chregu Exp $ /** * XML_image2svg - Image to SVG conversion * * The class converts images, such as of the format JPEG, PNG * and GIF to a standalone SVG representation. The image is being * encoded by the PHP native encode_base64() function. You can use it * to get back a complete SVG file, which is based on a predefinded, * easy adaptable template file, or you can take the encoded * file as a return value, using the get() method. Due to the * encoding by base64, the SVG files will increase approx. 30% in * size compared to the conventional image. * * NOTE: * Since PHP 4.0.5 GetImageSize() support has been added. * * EXAMPLE: * $i = &new XML_image2svg("test.jpg" ); * $i->tplFile = "tpl.image.svg"; * $i->show(); * * The class allows also commandline conversion of images: * C:\>php-cli -f Test_image2svg.php > test.svg * * REFERENCES: * http://www.ietf.org/rfc/rfc2397.txt, The "data" URL scheme * http://www.ietf.org/rfc/rfc2045.txt, Multipurpose Internet Mail Extensions * http://www.w3.org/Graphics/SVG/, Scalable Vector Graphics (SVG) */ /** * Image to svg conversion. * * * @version $Id: image2svg.php,v 1.1 2002/05/01 21:31:37 chregu Exp $ * @package XML * @author Urs Gehrig
*/ require_once( "PEAR.php") ; require_once( "HTML/IT.php") ; class XML_image2svg extends PEAR { /** * TODO: Modify the quality of the output image. Needs GD support. * * @var imageQuality */ var $imageQuality = 0.8; /** * Image file pointer. * */ var $fp = null; /** * Storage representation of the image string * * @var string */ var $buffer = ""; /** * Image information * * @var array */ var $par = array(0, 0, 0, "" ); /** * Constructs a new XML_image2svg object. * * @param string image filename * @access public * @author Urs Gehrig
*/ function XML_image2svg ($fileName="" ) { $this->PEAR(); $this->fileName = $fileName; $this->tpl = new IntegratedTemplate("." ); $this->tplFile = ""; $this->_getImage(); } /** * Read the image file binary-safe * * @access private * @return mixed bool on success or an error object otherwise * @author Urs Gehrig
*/ function _getImage () { if(file_exists($this->fileName )) { $fp = fopen ($this->fileName, "rb" ); $this->buffer = fread($fp, filesize ($this->fileName )); if (!$fp) { return $this->errorHandler("FAILED_OPENING_FILE", __FILE__, __LINE__ ); } $this->fp = $fp; fclose ($fp); return $this->_getImageParamteres(); } return $this->errorHandler("FILE_NOT_FOUND", __FILE__, __LINE__ ); } /** * Get the specific image parameters * * @access private * @return mixed bool on success or an error object on fail * @author Urs Gehrig
*/ function _getImageParamteres () { if (is_resource($this->fp )) { $this->par = @getimagesize($this->fileName ); SWITCH ($this->par[2] ) { case 1: $this->imagetype = 'image/gif'; break; case 2: $this->imagetype = 'image/jpg'; break; case 3: $this->imagetype = 'image/png'; break; default: return $this->errorHandler("MIME_ERROR", __FILE__, __LINE__ ); } return TRUE; } return $this->errorHandler("READ_ERROR", __FILE__, __LINE__ ); } /** * Convert the image to an SVG file. Having specified a template file * allows direct inclusion of the image into a more sophisticated SVG file; * while not giving a template file, a most slim standalone SVG string will * be returned. * * @access private * @return mixed a string on success or an error object otherwise * @author Urs Gehrig
*/ function _convertToSvg () { if(file_exists($this->tplFile ) ) { if(strlen($this->tplFile )) { $this->tpl->loadTemplatefile($this->tplFile, true, true); $content = array( "img_width" => $this->par[0], "img_height" => $this->par[1], "data_url_scheme" => sprintf("data:%s;base64,%s", $this->imagetype, $this->encodeImage() ) ); $this->tpl->setVariable($content); return $this->tpl->get(); } else { $s .= sprintf("" ); $s .= sprintf("
", $this->par[3], $this->par[0], $this->par[1] ); $s .= sprintf("
", $this->par[3], $this->imagetype, $this->encodeImage() ); $s .= sprintf("
"); return $s; } } else { return $this->errorHandler("TEMPLATE_FILE_MISSING", __FILE__, __LINE__ ); } } /** * Encode image by base 64 * * @access public * @return string Returns encoded image as string * @author Urs Gehrig
*/ function encodeImage () { return base64_encode($this->buffer ); } /** * Return the SVG output * * @access public * @return mixed PEAR_Error object or string * @author Urs Gehrig
*/ function get () { if (is_resource($this->fp )) { return $this->_convertToSvg(); } return $this->errorHandler("CONVERSION", __FILE__, __LINE__ );; } /** * Display the SVG output * * @access public * @return mixed PEAR_Error object or bool on success * @author Urs Gehrig
*/ function show () { if ($res = $this->get() ) { header("Content-type: image/svg+xml" ); echo $res; return TRUE; } return $this->errorHandler("UNKNOWN", __FILE__, __LINE__ ); } /** * Handling the error messages * * @param string error message * @param string file where the error occured * @param string linenumber where the error occured * @access public * @return object PEAR_Error object * @author Urs Gehrig
*/ function errorHandler ($err="UNKNOWN", $file=__FILE__, $line=__LINE__ ) { $this->error_codes = array ( "FILE_NOT_FOUND" => "The image file could not be found.", "FAILED_OPENING_FILE" => "The image file could not be opened.", "READ_ERROR" => "The image file could not be read.", "MIME_ERROR" => "Unsupported mimetype.", "TEMPLATE_FILE_MISSING" => "The SVG template file is missing.", "CONVERSION" => "Error on returning the conversion result.", "UNKNOWN" => "Unknown error." ); return $this->raiseError(sprintf("%s [%s on line %d].", $this->error_codes[$err], $file, $line ), null, PEAR_ERROR_DIE ); } /** * Class destructor * * @access private * @author Urs Gehrig
*/ function _XML_image2svg () { $this->_PEAR(); } } ?>