247 lines
7.6 KiB
PHP
247 lines
7.6 KiB
PHP
|
<?php
|
||
|
/**
|
||
|
* Zend Framework
|
||
|
*
|
||
|
* LICENSE
|
||
|
*
|
||
|
* This source file is subject to the new BSD license that is bundled
|
||
|
* with this package in the file LICENSE.txt.
|
||
|
* It is also available through the world-wide-web at this URL:
|
||
|
* http://framework.zend.com/license/new-bsd
|
||
|
* If you did not receive a copy of the license and are unable to
|
||
|
* obtain it through the world-wide-web, please send an email
|
||
|
* to license@zend.com so we can send you a copy immediately.
|
||
|
*
|
||
|
* @category Zend
|
||
|
* @package Zend_Pdf
|
||
|
* @subpackage Images
|
||
|
* @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
|
||
|
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||
|
* @version $Id: Image.php 16971 2009-07-22 18:05:45Z mikaelkael $
|
||
|
*/
|
||
|
|
||
|
/** Zend_Pdf_FileParserDataSource */
|
||
|
require_once 'Zend/Pdf/FileParserDataSource.php';
|
||
|
|
||
|
/** Zend_Pdf_FileParserDataSource_File */
|
||
|
require_once 'Zend/Pdf/FileParserDataSource/File.php';
|
||
|
|
||
|
/** Zend_Pdf_FileParserDataSource_String */
|
||
|
require_once 'Zend/Pdf/FileParserDataSource/String.php';
|
||
|
|
||
|
/**
|
||
|
* Abstract factory class which vends {@link Zend_Pdf_Resource_Image} objects.
|
||
|
*
|
||
|
* This class is also the home for image-related constants because the name of
|
||
|
* the true base class ({@link Zend_Pdf_Resource_Image}) is not intuitive for the
|
||
|
* end user.
|
||
|
*
|
||
|
* @package Zend_Pdf
|
||
|
* @subpackage Images
|
||
|
* @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
|
||
|
* @license http://framework.zend.com/license/new-bsd New BSD License
|
||
|
*/
|
||
|
abstract class Zend_Pdf_Image
|
||
|
{
|
||
|
/**** Class Constants ****/
|
||
|
|
||
|
|
||
|
/* Image Types */
|
||
|
|
||
|
const TYPE_UNKNOWN = 0;
|
||
|
const TYPE_JPEG = 1;
|
||
|
const TYPE_PNG = 2;
|
||
|
const TYPE_TIFF = 3;
|
||
|
|
||
|
/* TIFF Constants */
|
||
|
|
||
|
const TIFF_FIELD_TYPE_BYTE=1;
|
||
|
const TIFF_FIELD_TYPE_ASCII=2;
|
||
|
const TIFF_FIELD_TYPE_SHORT=3;
|
||
|
const TIFF_FIELD_TYPE_LONG=4;
|
||
|
const TIFF_FIELD_TYPE_RATIONAL=5;
|
||
|
|
||
|
const TIFF_TAG_IMAGE_WIDTH=256;
|
||
|
const TIFF_TAG_IMAGE_LENGTH=257; //Height
|
||
|
const TIFF_TAG_BITS_PER_SAMPLE=258;
|
||
|
const TIFF_TAG_COMPRESSION=259;
|
||
|
const TIFF_TAG_PHOTOMETRIC_INTERPRETATION=262;
|
||
|
const TIFF_TAG_STRIP_OFFSETS=273;
|
||
|
const TIFF_TAG_SAMPLES_PER_PIXEL=277;
|
||
|
const TIFF_TAG_STRIP_BYTE_COUNTS=279;
|
||
|
|
||
|
const TIFF_COMPRESSION_UNCOMPRESSED = 1;
|
||
|
const TIFF_COMPRESSION_CCITT1D = 2;
|
||
|
const TIFF_COMPRESSION_GROUP_3_FAX = 3;
|
||
|
const TIFF_COMPRESSION_GROUP_4_FAX = 4;
|
||
|
const TIFF_COMPRESSION_LZW = 5;
|
||
|
const TIFF_COMPRESSION_JPEG = 6;
|
||
|
const TIFF_COMPRESSION_FLATE = 8;
|
||
|
const TIFF_COMPRESSION_FLATE_OBSOLETE_CODE = 32946;
|
||
|
const TIFF_COMPRESSION_PACKBITS = 32773;
|
||
|
|
||
|
const TIFF_PHOTOMETRIC_INTERPRETATION_WHITE_IS_ZERO=0;
|
||
|
const TIFF_PHOTOMETRIC_INTERPRETATION_BLACK_IS_ZERO=1;
|
||
|
const TIFF_PHOTOMETRIC_INTERPRETATION_RGB=2;
|
||
|
const TIFF_PHOTOMETRIC_INTERPRETATION_RGB_INDEXED=3;
|
||
|
const TIFF_PHOTOMETRIC_INTERPRETATION_CMYK=5;
|
||
|
const TIFF_PHOTOMETRIC_INTERPRETATION_YCBCR=6;
|
||
|
const TIFF_PHOTOMETRIC_INTERPRETATION_CIELAB=8;
|
||
|
|
||
|
/* PNG Constants */
|
||
|
|
||
|
const PNG_COMPRESSION_DEFAULT_STRATEGY = 0;
|
||
|
const PNG_COMPRESSION_FILTERED = 1;
|
||
|
const PNG_COMPRESSION_HUFFMAN_ONLY = 2;
|
||
|
const PNG_COMPRESSION_RLE = 3;
|
||
|
|
||
|
const PNG_FILTER_NONE = 0;
|
||
|
const PNG_FILTER_SUB = 1;
|
||
|
const PNG_FILTER_UP = 2;
|
||
|
const PNG_FILTER_AVERAGE = 3;
|
||
|
const PNG_FILTER_PAETH = 4;
|
||
|
|
||
|
const PNG_INTERLACING_DISABLED = 0;
|
||
|
const PNG_INTERLACING_ENABLED = 1;
|
||
|
|
||
|
const PNG_CHANNEL_GRAY = 0;
|
||
|
const PNG_CHANNEL_RGB = 2;
|
||
|
const PNG_CHANNEL_INDEXED = 3;
|
||
|
const PNG_CHANNEL_GRAY_ALPHA = 4;
|
||
|
const PNG_CHANNEL_RGB_ALPHA = 6;
|
||
|
|
||
|
/**** Public Interface ****/
|
||
|
|
||
|
|
||
|
/* Factory Methods */
|
||
|
|
||
|
/**
|
||
|
* Returns a {@link Zend_Pdf_Resource_Image} object by file path.
|
||
|
*
|
||
|
* @param string $filePath Full path to the image file.
|
||
|
* @return Zend_Pdf_Resource_Image
|
||
|
* @throws Zend_Pdf_Exception
|
||
|
*/
|
||
|
public static function imageWithPath($filePath)
|
||
|
{
|
||
|
|
||
|
/**
|
||
|
* use old implementation
|
||
|
* @todo switch to new implementation
|
||
|
*/
|
||
|
require_once 'Zend/Pdf/Resource/ImageFactory.php';
|
||
|
return Zend_Pdf_Resource_ImageFactory::factory($filePath);
|
||
|
|
||
|
|
||
|
/* Create a file parser data source object for this file. File path and
|
||
|
* access permission checks are handled here.
|
||
|
*/
|
||
|
$dataSource = new Zend_Pdf_FileParserDataSource_File($filePath);
|
||
|
|
||
|
/* Attempt to determine the type of image. We can't always trust file
|
||
|
* extensions, but try that first since it's fastest.
|
||
|
*/
|
||
|
$fileExtension = strtolower(pathinfo($filePath, PATHINFO_EXTENSION));
|
||
|
|
||
|
/* If it turns out that the file is named improperly and we guess the
|
||
|
* wrong type, we'll get null instead of an image object.
|
||
|
*/
|
||
|
switch ($fileExtension) {
|
||
|
case 'tif':
|
||
|
//Fall through to next case;
|
||
|
case 'tiff':
|
||
|
$image = Zend_Pdf_Image::_extractTiffImage($dataSource);
|
||
|
break;
|
||
|
case 'png':
|
||
|
$image = Zend_Pdf_Image::_extractPngImage($dataSource);
|
||
|
break;
|
||
|
case 'jpg':
|
||
|
//Fall through to next case;
|
||
|
case 'jpe':
|
||
|
//Fall through to next case;
|
||
|
case 'jpeg':
|
||
|
$image = Zend_Pdf_Image::_extractJpegImage($dataSource);
|
||
|
break;
|
||
|
default:
|
||
|
throw new Zend_Pdf_Exception("Cannot create image resource. File extension not known or unsupported type.");
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
/* Done with the data source object.
|
||
|
*/
|
||
|
$dataSource = null;
|
||
|
|
||
|
if ($image !== null) {
|
||
|
return $image;
|
||
|
|
||
|
} else {
|
||
|
/* The type of image could not be determined. Give up.
|
||
|
*/
|
||
|
throw new Zend_Pdf_Exception("Cannot determine image type: $filePath",
|
||
|
Zend_Pdf_Exception::CANT_DETERMINE_IMAGE_TYPE);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/**** Internal Methods ****/
|
||
|
|
||
|
|
||
|
/* Image Extraction Methods */
|
||
|
|
||
|
/**
|
||
|
* Attempts to extract a JPEG Image from the data source.
|
||
|
*
|
||
|
* @param Zend_Pdf_FileParserDataSource $dataSource
|
||
|
* @return Zend_Pdf_Resource_Image_Jpeg May also return null if
|
||
|
* the data source does not appear to contain valid image data.
|
||
|
* @throws Zend_Pdf_Exception
|
||
|
*/
|
||
|
protected static function _extractJpegImage($dataSource)
|
||
|
{
|
||
|
$imageParser = new Zend_Pdf_FileParser_Image_Jpeg($dataSource);
|
||
|
$image = new Zend_Pdf_Resource_Image_Jpeg($imageParser);
|
||
|
unset($imageParser);
|
||
|
|
||
|
return $image;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Attempts to extract a PNG Image from the data source.
|
||
|
*
|
||
|
* @param Zend_Pdf_FileParserDataSource $dataSource
|
||
|
* @return Zend_Pdf_Resource_Image_Png May also return null if
|
||
|
* the data source does not appear to contain valid image data.
|
||
|
* @throws Zend_Pdf_Exception
|
||
|
*/
|
||
|
protected static function _extractPngImage($dataSource)
|
||
|
{
|
||
|
$imageParser = new Zend_Pdf_FileParser_Image_PNG($dataSource);
|
||
|
$image = new Zend_Pdf_Resource_Image_PNG($imageParser);
|
||
|
unset($imageParser);
|
||
|
|
||
|
return $image;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Attempts to extract a TIFF Image from the data source.
|
||
|
*
|
||
|
* @param Zend_Pdf_FileParserDataSource $dataSource
|
||
|
* @return Zend_Pdf_Resource_Image_Tiff May also return null if
|
||
|
* the data source does not appear to contain valid image data.
|
||
|
* @throws Zend_Pdf_Exception
|
||
|
*/
|
||
|
protected static function _extractTiffImage($dataSource)
|
||
|
{
|
||
|
$imageParser = new Zend_Pdf_FileParser_Image_Tiff($dataSource);
|
||
|
$image = new Zend_Pdf_Resource_Image_Tiff($imageParser);
|
||
|
unset($imageParser);
|
||
|
|
||
|
return $image;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
|