PageRenderTime 23ms CodeModel.GetById 6ms app.highlight 6ms RepoModel.GetById 0ms app.codeStats 0ms

/zf/library/Zend/Pdf/Resource/Image/Jpeg.php

http://github.com/eryx/php-framework-benchmark
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