⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 png.php

📁 Bug tracker, and reporter.
💻 PHP
📖 第 1 页 / 共 2 页
字号:
                default:                    fseek($imageFile, $chunkLength + 4, SEEK_CUR); //Skip the section                    break;            }        }        fclose($imageFile);        $compressed = true;        $imageDataTmp = '';        $smaskData = '';        switch ($color) {            case Zend_Pdf_Resource_Image_Png::PNG_CHANNEL_RGB:                $colorSpace = new Zend_Pdf_Element_Name('DeviceRGB');                break;            case Zend_Pdf_Resource_Image_Png::PNG_CHANNEL_GRAY:                $colorSpace = new Zend_Pdf_Element_Name('DeviceGray');                break;            case Zend_Pdf_Resource_Image_Png::PNG_CHANNEL_INDEXED:                if(empty($paletteData)) {                    throw new Zend_Pdf_Exception( "PNG Corruption: No palette data read for indexed type PNG." );                }                $colorSpace = new Zend_Pdf_Element_Array();                $colorSpace->items[] = new Zend_Pdf_Element_Name('Indexed');                $colorSpace->items[] = new Zend_Pdf_Element_Name('DeviceRGB');                $colorSpace->items[] = new Zend_Pdf_Element_Numeric((strlen($paletteData)/3-1));                $paletteObject = $this->_objectFactory->newObject(new Zend_Pdf_Element_String_Binary($paletteData));                $colorSpace->items[] = $paletteObject;                break;            case Zend_Pdf_Resource_Image_Png::PNG_CHANNEL_GRAY_ALPHA:                /*                 * To decode PNG's with alpha data we must create two images from one. One image will contain the Gray data                 * the other will contain the Gray transparency overlay data. The former will become the object data and the latter                 * will become the Shadow Mask (SMask).                 */                if($bits > 8) {                    throw new Zend_Pdf_Exception("Alpha PNGs with bit depth > 8 are not yet supported");                }                $colorSpace = new Zend_Pdf_Element_Name('DeviceGray');                $decodingObjFactory = Zend_Pdf_ElementFactory::createFactory(1);                $decodingStream = $decodingObjFactory->newStreamObject($imageData);                $decodingStream->dictionary->Filter      = new Zend_Pdf_Element_Name('FlateDecode');                $decodingStream->dictionary->DecodeParms = new Zend_Pdf_Element_Dictionary();                $decodingStream->dictionary->DecodeParms->Predictor        = new Zend_Pdf_Element_Numeric(15);                $decodingStream->dictionary->DecodeParms->Columns          = new Zend_Pdf_Element_Numeric($width);                $decodingStream->dictionary->DecodeParms->Colors           = new Zend_Pdf_Element_Numeric(2);   //GreyAlpha                $decodingStream->dictionary->DecodeParms->BitsPerComponent = new Zend_Pdf_Element_Numeric($bits);                $decodingStream->skipFilters();                $pngDataRawDecoded = $decodingStream->value;                //Iterate every pixel and copy out gray data and alpha channel (this will be slow)                for($pixel = 0, $pixelcount = ($width * $height); $pixel < $pixelcount; $pixel++) {                    $imageDataTmp .= $pngDataRawDecoded[($pixel*2)];                    $smaskData .= $pngDataRawDecoded[($pixel*2)+1];                }                $compressed = false;                $imageData  = $imageDataTmp; //Overwrite image data with the gray channel without alpha                break;            case Zend_Pdf_Resource_Image_Png::PNG_CHANNEL_RGB_ALPHA:                /*                 * To decode PNG's with alpha data we must create two images from one. One image will contain the RGB data                 * the other will contain the Gray transparency overlay data. The former will become the object data and the latter                 * will become the Shadow Mask (SMask).                 */                if($bits > 8) {                    throw new Zend_Pdf_Exception("Alpha PNGs with bit depth > 8 are not yet supported");                }                $colorSpace = new Zend_Pdf_Element_Name('DeviceRGB');                $decodingObjFactory = Zend_Pdf_ElementFactory::createFactory(1);                $decodingStream = $decodingObjFactory->newStreamObject($imageData);                $decodingStream->dictionary->Filter      = new Zend_Pdf_Element_Name('FlateDecode');                $decodingStream->dictionary->DecodeParms = new Zend_Pdf_Element_Dictionary();                $decodingStream->dictionary->DecodeParms->Predictor        = new Zend_Pdf_Element_Numeric(15);                $decodingStream->dictionary->DecodeParms->Columns          = new Zend_Pdf_Element_Numeric($width);                $decodingStream->dictionary->DecodeParms->Colors           = new Zend_Pdf_Element_Numeric(4);   //RGBA                $decodingStream->dictionary->DecodeParms->BitsPerComponent = new Zend_Pdf_Element_Numeric($bits);                $decodingStream->skipFilters();                $pngDataRawDecoded = $decodingStream->value;                //Iterate every pixel and copy out rgb data and alpha channel (this will be slow)                for($pixel = 0, $pixelcount = ($width * $height); $pixel < $pixelcount; $pixel++) {                    $imageDataTmp .= $pngDataRawDecoded[($pixel*4)+0] . $pngDataRawDecoded[($pixel*4)+1] . $pngDataRawDecoded[($pixel*4)+2];                    $smaskData .= $pngDataRawDecoded[($pixel*4)+3];                }                $compressed = false;                $imageData  = $imageDataTmp; //Overwrite image data with the RGB channel without alpha                break;            default:                throw new Zend_Pdf_Exception( "PNG Corruption: Invalid color space." );        }        if(empty($imageData)) {            throw new Zend_Pdf_Exception( "Corrupt PNG Image. Mandatory IDAT chunk not found." );        }        $imageDictionary = $this->_resource->dictionary;        if(!empty($smaskData)) {            /*             * Includes the Alpha transparency data as a Gray Image, then assigns the image as the Shadow Mask for the main image data.             */            $smaskStream = $this->_objectFactory->newStreamObject($smaskData);            $smaskStream->dictionary->Type = new Zend_Pdf_Element_Name('XObject');            $smaskStream->dictionary->Subtype = new Zend_Pdf_Element_Name('Image');            $smaskStream->dictionary->Width = new Zend_Pdf_Element_Numeric($width);            $smaskStream->dictionary->Height = new Zend_Pdf_Element_Numeric($height);            $smaskStream->dictionary->ColorSpace = new Zend_Pdf_Element_Name('DeviceGray');            $smaskStream->dictionary->BitsPerComponent = new Zend_Pdf_Element_Numeric($bits);            $imageDictionary->SMask = $smaskStream;            // Encode stream with FlateDecode filter            $smaskStreamDecodeParms = array();            $smaskStreamDecodeParms['Predictor']        = new Zend_Pdf_Element_Numeric(15);            $smaskStreamDecodeParms['Columns']          = new Zend_Pdf_Element_Numeric($width);            $smaskStreamDecodeParms['Colors']           = new Zend_Pdf_Element_Numeric(1);            $smaskStreamDecodeParms['BitsPerComponent'] = new Zend_Pdf_Element_Numeric(8);            $smaskStream->dictionary->DecodeParms  = new Zend_Pdf_Element_Dictionary($smaskStreamDecodeParms);            $smaskStream->dictionary->Filter       = new Zend_Pdf_Element_Name('FlateDecode');        }        if(!empty($transparencyData)) {            //This is experimental and not properly tested.            $imageDictionary->Mask = new Zend_Pdf_Element_Array($transparencyData);        }        $imageDictionary->Width            = new Zend_Pdf_Element_Numeric($width);        $imageDictionary->Height           = new Zend_Pdf_Element_Numeric($height);        $imageDictionary->ColorSpace       = $colorSpace;        $imageDictionary->BitsPerComponent = new Zend_Pdf_Element_Numeric($bits);        $imageDictionary->Filter       = new Zend_Pdf_Element_Name('FlateDecode');        $decodeParms = array();        $decodeParms['Predictor']        = new Zend_Pdf_Element_Numeric(15); // Optimal prediction        $decodeParms['Columns']          = new Zend_Pdf_Element_Numeric($width);        $decodeParms['Colors']           = new Zend_Pdf_Element_Numeric((($color==Zend_Pdf_Resource_Image_Png::PNG_CHANNEL_RGB || $color==Zend_Pdf_Resource_Image_Png::PNG_CHANNEL_RGB_ALPHA)?(3):(1)));        $decodeParms['BitsPerComponent'] = new Zend_Pdf_Element_Numeric($bits);        $imageDictionary->DecodeParms  = new Zend_Pdf_Element_Dictionary($decodeParms);        //Include only the image IDAT section data.        $this->_resource->value = $imageData;        //Skip double compression        if ($compressed) {            $this->_resource->skipFilters();        }    }    /**     * Image width     */    public function getPixelWidth() {    return $this->_width;    }    /**     * Image height     */    public function getPixelHeight() {        return $this->_height;    }    /**     * Image properties     */    public function getProperties() {        return $this->_imageProperties;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -