本文整理汇总了PHP中Zend_Pdf_Image::__construct方法的典型用法代码示例。如果您正苦于以下问题:PHP Zend_Pdf_Image::__construct方法的具体用法?PHP Zend_Pdf_Image::__construct怎么用?PHP Zend_Pdf_Image::__construct使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Zend_Pdf_Image
的用法示例。
在下文中一共展示了Zend_Pdf_Image::__construct方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: __construct
/**
* Object constructor
*
* @param string $imageFileName
* @throws Zend_Pdf_Exception
*/
public function __construct($imageFileName)
{
if (!function_exists('gd_info')) {
throw new Zend_Pdf_Exception('Image extension is not installed.');
}
$gd_options = gd_info();
if (!$gd_options['JPG Support']) {
throw new Zend_Pdf_Exception('JPG support is not configured properly.');
}
if (($imageInfo = getimagesize($imageFileName)) === false) {
throw new Zend_Pdf_Exception('Corrupted image or image doesn\'t exist.');
}
if ($imageInfo[2] != IMAGETYPE_JPEG && $imageInfo[2] != IMAGETYPE_JPEG2000) {
throw new Zend_Pdf_Exception('ImageType is not JPG');
}
parent::__construct();
switch ($imageInfo['channels']) {
case 3:
$colorSpace = 'DeviceRGB';
break;
case 4:
$colorSpace = 'DeviceCMYK';
break;
default:
$colorSpace = 'DeviceGray';
break;
}
$imageDictionary = $this->_resource->dictionary;
$imageDictionary->Width = new Zend_Pdf_Element_Numeric($imageInfo[0]);
$imageDictionary->Height = new Zend_Pdf_Element_Numeric($imageInfo[1]);
$imageDictionary->ColorSpace = new Zend_Pdf_Element_Name($colorSpace);
$imageDictionary->BitsPerComponent = new Zend_Pdf_Element_Numeric($imageInfo['bits']);
if ($imageInfo[2] == IMAGETYPE_JPEG) {
$imageDictionary->Filter = new Zend_Pdf_Element_Name('DCTDecode');
} else {
if ($imageInfo[2] == IMAGETYPE_JPEG2000) {
$imageDictionary->Filter = new Zend_Pdf_Element_Name('JPXDecode');
}
}
if (($imageFile = @fopen($imageFileName, 'rb')) === false) {
throw new Zend_Pdf_Exception("Can not open '{$imageFileName}' file for reading.");
}
$byteCount = filesize($imageFileName);
$this->_resource->value = '';
while ($byteCount > 0 && ($nextBlock = fread($imageFile, $byteCount)) != false) {
$this->_resource->value .= $nextBlock;
$byteCount -= strlen($nextBlock);
}
fclose($imageFile);
$this->_resource->skipFilters();
$this->_width = $imageInfo[0];
$this->_height = $imageInfo[1];
$this->_imageProperties = array();
$this->_imageProperties['bitDepth'] = $imageInfo['bits'];
$this->_imageProperties['jpegImageType'] = $imageInfo[2];
$this->_imageProperties['jpegColorType'] = $imageInfo['channels'];
}
示例2: __construct
/**
* Object constructor
*
* @param string $imageFileName
* @throws Zend_Pdf_Exception
*/
public function __construct($imageFileName)
{
if (($imageInfo = getimagesize($imageFileName)) === false) {
throw new Zend_Pdf_Exception('Corrupted image or image doesn\'t exist.');
}
if ($imageInfo[2] != IMAGETYPE_TIFF_II && $imageInfo[2] != IMAGETYPE_TIFF_MM) {
throw new Zend_Pdf_Exception('ImageType is not TIFF');
}
parent::__construct();
/* This needs to be fixed
switch ($imageInfo['channels']) {
case 3:
$colorSpace = 'DeviceRGB';
break;
case 4:
$colorSpace = 'DeviceCMYK';
break;
default:
$colorSpace = 'DeviceGray';
break;
}
*/
/*
This is a temporary hack - this needs to be read from the tiff file format.
IMAGICK pecl extension contains imagick_getcolorspace but introducing another
extension dependency is probably bad.
*/
$colorSpace = 'DeviceRGB';
$imageDictionary = $this->_resource->dictionary;
$imageDictionary->Width = new Zend_Pdf_Element_Numeric($imageInfo[0]);
$imageDictionary->Height = new Zend_Pdf_Element_Numeric($imageInfo[1]);
$imageDictionary->ColorSpace = new Zend_Pdf_Element_Name($colorSpace);
// $imageDictionary->BitsPerComponent = new Zend_Pdf_Element_Numeric($imageInfo['bits']);
//This is also a temporary hack - Corresponds imagick_getimagedepth
$imageDictionary->BitsPerComponent = new Zend_Pdf_Element_Numeric(8);
if (($imageFile = @fopen($imageFileName, 'rb')) === false) {
throw new Zend_Pdf_Exception("Can not open '{$imageFileName}' file for reading.");
}
$byteCount = filesize($imageFileName);
$this->_resource->value = '';
while ($byteCount > 0 && ($nextBlock = fread($imageFile, $byteCount)) != false) {
$this->_resource->value .= $nextBlock;
$byteCount -= strlen($nextBlock);
}
fclose($imageFile);
$this->_resource->skipFilters();
}
示例3: __construct
/**
* Object constructor
*
* @param string $imageFileName
* @throws Zend_Pdf_Exception
* @todo Add compression conversions to support compression strategys other than PNG_COMPRESSION_DEFAULT_STRATEGY.
* @todo Add pre-compression filtering.
* @todo Add interlaced image handling.
* @todo Add support for 16-bit images. Requires PDF version bump to 1.5 at least.
* @todo Add processing for all PNG chunks defined in the spec. gAMA etc.
* @todo Fix tRNS chunk support for Indexed Images to a SMask.
*/
public function __construct($imageFileName)
{
if (($imageFile = @fopen($imageFileName, 'rb')) === false) {
throw new Zend_Pdf_Exception("Can not open '{$imageFileName}' file for reading.");
}
parent::__construct();
//Check if the file is a PNG
fseek($imageFile, 1, SEEK_CUR);
//First signature byte (%)
if ('PNG' != fread($imageFile, 3)) {
throw new Zend_Pdf_Exception('Image is not a PNG');
}
fseek($imageFile, 12, SEEK_CUR);
//Signature bytes (Includes the IHDR chunk) IHDR processed linerarly because it doesnt contain a variable chunk length
$wtmp = unpack('Ni', fread($imageFile, 4));
//Unpack a 4-Byte Long
$width = $wtmp['i'];
$htmp = unpack('Ni', fread($imageFile, 4));
$height = $htmp['i'];
$bits = ord(fread($imageFile, 1));
//Higher than 8 bit depths are only supported in later versions of PDF.
$color = ord(fread($imageFile, 1));
$compression = ord(fread($imageFile, 1));
$prefilter = ord(fread($imageFile, 1));
if (($interlacing = ord(fread($imageFile, 1))) != Zend_Pdf_Image_Png::PNG_INTERLACING_DISABLED) {
throw new Zend_Pdf_Exception("Only non-interlaced images are currently supported.");
}
$this->_width = $width;
$this->_height = $height;
$this->_imageProperties = array();
$this->_imageProperties['bitDepth'] = $bits;
$this->_imageProperties['pngColorType'] = $color;
$this->_imageProperties['pngFilterType'] = $prefilter;
$this->_imageProperties['pngCompressionType'] = $compression;
$this->_imageProperties['pngInterlacingType'] = $interlacing;
fseek($imageFile, 4, SEEK_CUR);
//4 Byte Ending Sequence
$imageData = '';
/*
* The following loop processes PNG chunks. 4 Byte Longs are packed first give the chunk length
* followed by the chunk signature, a four byte code. IDAT and IEND are manditory in any PNG.
*/
while (($chunkLengthBytes = fread($imageFile, 4)) !== false) {
$chunkLengthtmp = unpack('Ni', $chunkLengthBytes);
$chunkLength = $chunkLengthtmp['i'];
$chunkType = fread($imageFile, 4);
switch ($chunkType) {
case 'IDAT':
//Image Data
/*
* Reads the actual image data from the PNG file. Since we know at this point that the compression
* strategy is the default strategy, we also know that this data is Zip compressed. We will either copy
* the data directly to the PDF and provide the correct FlateDecode predictor, or decompress the data
* decode the filters and output the data as a raw pixel map.
*/
$imageData .= fread($imageFile, $chunkLength);
fseek($imageFile, 4, SEEK_CUR);
break;
case 'PLTE':
//Palette
$paletteData = fread($imageFile, $chunkLength);
fseek($imageFile, 4, SEEK_CUR);
break;
case 'tRNS':
//Basic (non-alpha channel) transparency.
$trnsData = fread($imageFile, $chunkLength);
switch ($color) {
case Zend_Pdf_Image_Png::PNG_CHANNEL_GRAY:
$baseColor = ord(substr($trnsData, 1, 1));
$transparencyData = array(new Zend_Pdf_Element_Numeric($baseColor), new Zend_Pdf_Element_Numeric($baseColor));
break;
case Zend_Pdf_Image_Png::PNG_CHANNEL_RGB:
$red = ord(substr($trnsData, 1, 1));
$green = ord(substr($trnsData, 3, 1));
$blue = ord(substr($trnsData, 5, 1));
$transparencyData = array(new Zend_Pdf_Element_Numeric($red), new Zend_Pdf_Element_Numeric($red), new Zend_Pdf_Element_Numeric($green), new Zend_Pdf_Element_Numeric($green), new Zend_Pdf_Element_Numeric($blue), new Zend_Pdf_Element_Numeric($blue));
break;
case Zend_Pdf_Image_Png::PNG_CHANNEL_INDEXED:
//Find the first transparent color in the index, we will mask that. (This is a bit of a hack. This should be a SMask and mask all entries values).
if (($trnsIdx = strpos($trnsData, chr(0))) !== false) {
$transparencyData = array(new Zend_Pdf_Element_Numeric($trnsIdx), new Zend_Pdf_Element_Numeric($trnsIdx));
}
break;
case Zend_Pdf_Image_Png::PNG_CHANNEL_GRAY_ALPHA:
// Fall through to the next case
// Fall through to the next case
case Zend_Pdf_Image_Png::PNG_CHANNEL_RGB_ALPHA:
throw new Zend_Pdf_Exception("tRNS chunk illegal for Alpha Channel Images");
//.........这里部分代码省略.........
示例4: __construct
/**
* Object constructor
*
* @param string $imageFileName
* @throws Zend_Pdf_Exception
*/
public function __construct($imageFileName)
{
if (($imageFile = @fopen($imageFileName, 'rb')) === false) {
throw new Zend_Pdf_Exception("Can not open '{$imageFileName}' file for reading.");
}
parent::__construct();
//Check if the file is a PNG
fseek($imageFile, 1, SEEK_CUR);
//First signature byte (%)
if ('PNG' != fread($imageFile, 3)) {
throw new Zend_Pdf_Exception('Image is not a PNG');
}
fseek($imageFile, 12, SEEK_CUR);
//Signature bytes (Includes the IHDR chunk) IHDR processed linerarly because it doesnt contain a variable chunk length
$wtmp = unpack('Ni', fread($imageFile, 4));
//Unpack a 4-Byte Long
$width = $wtmp['i'];
$htmp = unpack('Ni', fread($imageFile, 4));
$height = $htmp['i'];
$bits = ord(fread($imageFile, 1));
//Higher than 8 bit depths are only supported in later versions of PDF.
$color = ord(fread($imageFile, 1));
if (ord(fread($imageFile, 1)) != Zend_Pdf_Image_PNG::PNG_COMPRESSION_DEFAULT_STRATEGY) {
//TODO: Add compression conversions
throw new Zend_Pdf_Exception("Only the default compression strategy is currently supported.");
}
if (ord(fread($imageFile, 1)) != Zend_Pdf_Image_PNG::PNG_FILTER_NONE) {
//TODO: Support PNG Filtering
throw new Zend_Pdf_Exception("Filtering methods are not currently supported. ");
}
if (ord(fread($imageFile, 1)) != Zend_Pdf_Image_PNG::PNG_INTERLACING_DISABLED) {
//TODO: Support Interlacing
throw new Zend_Pdf_Exception("Only non-interlaced images are currently supported.");
}
fseek($imageFile, 4, SEEK_CUR);
//4 Byte Ending Sequence
$imageData = '';
/*
* The following loop processes PNG chunks. 4 Byte Longs are packed first give the chunk length
* followed by the chunk signature, a four byte code. IDAT and IEND are manditory in any PNG.
*/
while ($chunkLengthBytes = fread($imageFile, 4)) {
$chunkLengthtmp = unpack('Ni', $chunkLengthBytes);
$chunkLength = $chunkLengthtmp['i'];
$chunkType = fread($imageFile, 4);
switch ($chunkType) {
//TODO: Support all PNG chunks
case 'IDAT':
//Image Data
$imageData .= fread($imageFile, $chunkLength);
fseek($imageFile, 4, SEEK_CUR);
break;
case 'PLTE':
//Palette
if ($color != Zend_Pdf_Image_PNG::PNG_CHANNEL_INDEXED) {
throw new Zend_Pdf_Exception("Only indexed color PNG's can contain palette entries.");
}
$paletteData = fread($imageFile, $chunkLength);
fseek($imageFile, 4, SEEK_CUR);
break;
case 'tRNS':
//Basic (non-alpha channel) transparency. (untested)
switch ($color) {
case Zend_Pdf_Image_PNG::PNG_CHANNEL_GRAY:
$baseColor = unpack('n', fread($imageFile, 2));
$transparencyData = array($baseColor['n']);
fseek($imageFile, $chunkLength - 2, SEEK_CUR);
break;
case Zend_Pdf_Image_PNG::PNG_CHANNEL_RGB:
$red = unpack('n', fread($imageFile, 2));
$green = unpack('n', fread($imageFile, 2));
$blue = unpack('n', fread($imageFile, 2));
$transparencyData = array($red['n'], $green['n'], $blue['n']);
fseek($imageFile, $chunkLength - 6, SEEK_CUR);
break;
case Zend_Pdf_Image_PNG::PNG_CHANNEL_INDEXED:
//TODO: Read "For color type 3 (indexed color), the tRNS chunk contains a series of one-byte alpha values, corresponding to entries in the PLTE chunk"
fseek($imageFile, $chunkLength, SEEK_CUR);
throw new Zend_Pdf_Exception("tRNS chunk not yet supported for INDEXED color images..");
break;
case Zend_Pdf_Image_PNG::PNG_CHANNEL_GRAY_ALPHA:
// Fall through to the next case
// Fall through to the next case
case Zend_Pdf_Image_PNG::PNG_CHANNEL_RGB_ALPHA:
fseek($imageFile, $chunkLength, SEEK_CUR);
throw new Zend_Pdf_Exception("tRNS chunk illegal for Alpha Channel Images");
break;
}
fseek($imageFile, 4, SEEK_CUR);
//4 Byte Ending Sequence
break;
case 'IEND':
break 2;
//End the loop too
//.........这里部分代码省略.........
示例5: __construct
/**
* Object constructor
*
* @param string $imageFileName
* @throws Zend_Pdf_Exception
*/
public function __construct($imageFileName)
{
if (($imageFile = @fopen($imageFileName, 'rb')) === false) {
throw new Zend_Pdf_Exception("Can not open '{$imageFileName}' file for reading.");
}
$byteOrderIndicator = fread($imageFile, 2);
if ($byteOrderIndicator == 'II') {
$this->_endianType = Zend_Pdf_Image_TIFF::TIFF_ENDIAN_LITTLE;
} else {
if ($byteOrderIndicator == 'MM') {
$this->_endianType = Zend_Pdf_Image_TIFF::TIFF_ENDIAN_BIG;
} else {
throw new Zend_Pdf_Exception("Not a tiff file or Tiff corrupt. No byte order indication found");
}
}
$version = $this->unpackBytes(Zend_Pdf_Image_TIFF::UNPACK_TYPE_SHORT, fread($imageFile, 2));
if ($version != 42) {
throw new Zend_Pdf_Exception("Not a tiff file or Tiff corrupt. Incorrect version number.");
}
$ifdOffset = $this->unpackBytes(Zend_Pdf_Image_TIFF::UNPACK_TYPE_LONG, fread($imageFile, 4));
$fileStats = fstat($imageFile);
$this->_fileSize = $fileStats['size'];
/*
* Tiff files are stored as a series of Image File Directories (IFD) each direcctory
* has a specific number of entries each 12 bytes in length. At the end of the directories
* is four bytes pointing to the offset of the next IFD.
*/
while ($ifdOffset > 0) {
if (fseek($imageFile, $ifdOffset, SEEK_SET) == -1 || $ifdOffset + 2 >= $this->_fileSize) {
throw new Zend_Pdf_Exception("Could not seek to the image file directory as indexed by the file. Likely cause is TIFF corruption. Offset: " . $ifdOffset);
}
$numDirEntries = $this->unpackBytes(Zend_Pdf_Image_TIFF::UNPACK_TYPE_SHORT, fread($imageFile, 2));
/*
* Since we now know how many entries are in this (IFD) we can extract the data.
* The format of a TIFF directory entry is:
*
* 2 bytes (short) tag code; See TIFF_TAG constants at the top for supported values. (There are many more in the spec)
* 2 bytes (short) field type
* 4 bytes (long) number of values, or value count.
* 4 bytes (mixed) data if the data will fit into 4 bytes or an offset if the data is too large.
*/
for ($dirEntryIdx = 1; $dirEntryIdx <= $numDirEntries; $dirEntryIdx++) {
$tag = $this->unpackBytes(Zend_Pdf_Image_TIFF::UNPACK_TYPE_SHORT, fread($imageFile, 2));
$fieldType = $this->unpackBytes(Zend_Pdf_Image_TIFF::UNPACK_TYPE_SHORT, fread($imageFile, 2));
$valueCount = $this->unpackBytes(Zend_Pdf_Image_TIFF::UNPACK_TYPE_LONG, fread($imageFile, 4));
switch ($fieldType) {
case Zend_Pdf_Image_TIFF::TIFF_FIELD_TYPE_BYTE:
$fieldLength = $valueCount;
break;
case Zend_Pdf_Image_TIFF::TIFF_FIELD_TYPE_ASCII:
$fieldLength = $valueCount;
break;
case Zend_Pdf_Image_TIFF::TIFF_FIELD_TYPE_SHORT:
$fieldLength = $valueCount * 2;
break;
case Zend_Pdf_Image_TIFF::TIFF_FIELD_TYPE_LONG:
$fieldLength = $valueCount * 4;
break;
case Zend_Pdf_Image_TIFF::TIFF_FIELD_TYPE_RATIONAL:
$fieldLength = $valueCount * 8;
break;
default:
$fieldLength = $valueCount;
}
$offsetBytes = fread($imageFile, 4);
if ($fieldLength <= 4) {
switch ($fieldType) {
case Zend_Pdf_Image_TIFF::TIFF_FIELD_TYPE_BYTE:
$value = $this->unpackBytes(Zend_Pdf_Image_TIFF::UNPACK_TYPE_BYTE, $offsetBytes);
break;
case Zend_Pdf_Image_TIFF::TIFF_FIELD_TYPE_ASCII:
//Fall through to next case
//Fall through to next case
case Zend_Pdf_Image_TIFF::TIFF_FIELD_TYPE_LONG:
$value = $this->unpackBytes(Zend_Pdf_Image_TIFF::UNPACK_TYPE_LONG, $offsetBytes);
break;
case Zend_Pdf_Image_TIFF::TIFF_FIELD_TYPE_SHORT:
//Fall through to next case
//Fall through to next case
default:
$value = $this->unpackBytes(Zend_Pdf_Image_TIFF::UNPACK_TYPE_SHORT, $offsetBytes);
}
} else {
$refOffset = $this->unpackBytes(Zend_Pdf_Image_TIFF::UNPACK_TYPE_LONG, $offsetBytes);
}
/*
* Linear tag processing is probably not the best way to do this. I've processed the tags according to the
* Tiff 6 specification and make some assumptions about when tags will be < 4 bytes and fit into $value and when
* they will be > 4 bytes and require seek/extraction of the offset. Same goes for extracting arrays of data, like
* the data offsets and length. This should be fixed in the future.
*/
switch ($tag) {
case Zend_Pdf_Image_TIFF::TIFF_TAG_IMAGE_WIDTH:
$this->_width = $value;
//.........这里部分代码省略.........