/zf/library/Zend/Pdf/Resource/Image/Jpeg.php
PHP | 152 lines | 89 code | 20 blank | 43 comment | 26 complexity | 1a65dc9fb478face991fe02b26d64713 MD5 | raw file
Possible License(s): MIT, BSD-3-Clause, Apache-2.0, LGPL-2.1, LGPL-3.0, BSD-2-Clause
1<?php 2/** 3 * Zend Framework 4 * 5 * LICENSE 6 * 7 * This source file is subject to the new BSD license that is bundled 8 * with this package in the file LICENSE.txt. 9 * It is also available through the world-wide-web at this URL: 10 * http://framework.zend.com/license/new-bsd 11 * If you did not receive a copy of the license and are unable to 12 * obtain it through the world-wide-web, please send an email 13 * to license@zend.com so we can send you a copy immediately. 14 * 15 * @category Zend 16 * @package Zend_Pdf 17 * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) 18 * @license http://framework.zend.com/license/new-bsd New BSD License 19 * @version $Id: Jpeg.php 23775 2011-03-01 17:25:24Z ralph $ 20 */ 21 22 23/** Internally used classes */ 24require_once 'Zend/Pdf/Element/Name.php'; 25require_once 'Zend/Pdf/Element/Numeric.php'; 26 27 28/** Zend_Pdf_Resource_Image */ 29require_once 'Zend/Pdf/Resource/Image.php'; 30 31/** 32 * JPEG image 33 * 34 * @package Zend_Pdf 35 * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) 36 * @license http://framework.zend.com/license/new-bsd New BSD License 37 */ 38class Zend_Pdf_Resource_Image_Jpeg extends Zend_Pdf_Resource_Image 39{ 40 41 protected $_width; 42 protected $_height; 43 protected $_imageProperties; 44 45 /** 46 * Object constructor 47 * 48 * @param string $imageFileName 49 * @throws Zend_Pdf_Exception 50 */ 51 public function __construct($imageFileName) 52 { 53 if (!function_exists('gd_info')) { 54 require_once 'Zend/Pdf/Exception.php'; 55 throw new Zend_Pdf_Exception('Image extension is not installed.'); 56 } 57 58 $gd_options = gd_info(); 59 if ( (!isset($gd_options['JPG Support']) || $gd_options['JPG Support'] != true) && 60 (!isset($gd_options['JPEG Support']) || $gd_options['JPEG Support'] != true) ) { 61 require_once 'Zend/Pdf/Exception.php'; 62 throw new Zend_Pdf_Exception('JPG support is not configured properly.'); 63 } 64 65 if (($imageInfo = getimagesize($imageFileName)) === false) { 66 require_once 'Zend/Pdf/Exception.php'; 67 throw new Zend_Pdf_Exception('Corrupted image or image doesn\'t exist.'); 68 } 69 if ($imageInfo[2] != IMAGETYPE_JPEG && $imageInfo[2] != IMAGETYPE_JPEG2000) { 70 require_once 'Zend/Pdf/Exception.php'; 71 throw new Zend_Pdf_Exception('ImageType is not JPG'); 72 } 73 74 parent::__construct(); 75 76 switch ($imageInfo['channels']) { 77 case 3: 78 $colorSpace = 'DeviceRGB'; 79 break; 80 case 4: 81 $colorSpace = 'DeviceCMYK'; 82 break; 83 default: 84 $colorSpace = 'DeviceGray'; 85 break; 86 } 87 88 $imageDictionary = $this->_resource->dictionary; 89 $imageDictionary->Width = new Zend_Pdf_Element_Numeric($imageInfo[0]); 90 $imageDictionary->Height = new Zend_Pdf_Element_Numeric($imageInfo[1]); 91 $imageDictionary->ColorSpace = new Zend_Pdf_Element_Name($colorSpace); 92 $imageDictionary->BitsPerComponent = new Zend_Pdf_Element_Numeric($imageInfo['bits']); 93 if ($imageInfo[2] == IMAGETYPE_JPEG) { 94 $imageDictionary->Filter = new Zend_Pdf_Element_Name('DCTDecode'); 95 } else if ($imageInfo[2] == IMAGETYPE_JPEG2000){ 96 $imageDictionary->Filter = new Zend_Pdf_Element_Name('JPXDecode'); 97 } 98 99 if (($imageFile = @fopen($imageFileName, 'rb')) === false ) { 100 require_once 'Zend/Pdf/Exception.php'; 101 throw new Zend_Pdf_Exception( "Can not open '$imageFileName' file for reading." ); 102 } 103 $byteCount = filesize($imageFileName); 104 $this->_resource->value = ''; 105 106 while ($byteCount > 0 && !feof($imageFile)) { 107 $nextBlock = fread($imageFile, $byteCount); 108 if ($nextBlock === false) { 109 require_once 'Zend/Pdf/Exception.php'; 110 throw new Zend_Pdf_Exception( "Error occured while '$imageFileName' file reading." ); 111 } 112 113 $this->_resource->value .= $nextBlock; 114 $byteCount -= strlen($nextBlock); 115 } 116 if ($byteCount != 0) { 117 require_once 'Zend/Pdf/Exception.php'; 118 throw new Zend_Pdf_Exception( "Error occured while '$imageFileName' file reading." ); 119 } 120 fclose($imageFile); 121 $this->_resource->skipFilters(); 122 123 $this->_width = $imageInfo[0]; 124 $this->_height = $imageInfo[1]; 125 $this->_imageProperties = array(); 126 $this->_imageProperties['bitDepth'] = $imageInfo['bits']; 127 $this->_imageProperties['jpegImageType'] = $imageInfo[2]; 128 $this->_imageProperties['jpegColorType'] = $imageInfo['channels']; 129 } 130 131 /** 132 * Image width 133 */ 134 public function getPixelWidth() { 135 return $this->_width; 136 } 137 138 /** 139 * Image height 140 */ 141 public function getPixelHeight() { 142 return $this->_height; 143 } 144 145 /** 146 * Image properties 147 */ 148 public function getProperties() { 149 return $this->_imageProperties; 150 } 151} 152