Show
Ignore:
Timestamp:
08/16/06 01:12:57 (16 years ago)
Author:
jerome
Message:

Initial support for the computation of ink coverage for PostScript?
input files.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • pkpgcounter/trunk/pkpgpdls/analyzer.py

    r358 r363  
    2626 
    2727import sys 
     28import os 
    2829import tempfile 
    2930 
    3031import version, pdlparser, postscript, pdf, pcl345, pclxl, \ 
    3132       escp2, dvi, tiff, ooo, zjstream 
    32  
     33import inkcoverage 
    3334 
    3435class AnalyzerOptions : 
     
    7172                self.closeFile() 
    7273            return size 
     74             
     75    def getInkCoverage(self, colorspace=None, resolution=None) : 
     76        """Extracts the percents of ink coverage from the input file.""" 
     77        result = None 
     78        cspace = colorspace or self.options.colorspace 
     79        res = resolution or self.options.resolution 
     80        if (not cspace) or (not res) : 
     81            raise ValueError, "Invalid colorspace (%s) or resolution (%s)" % (cspace, res) 
     82        self.openFile() 
     83        try : 
     84            pdlhandler = self.detectPDLHandler() 
     85        except pdlparser.PDLParserError, msg :     
     86            self.closeFile() 
     87            raise pdlparser.PDLParserError, "Unknown file format for %s (%s)" % (self.filename, msg) 
     88        else : 
     89            try : 
     90                tiffname = self.convertToTiffMultiPage24NC(pdlhandler) 
     91                result = inkcoverage.getInkCoverage(tiffname, cspace) 
     92                try : 
     93                    os.remove(tiffname) 
     94                except OSError : 
     95                    sys.stderr.write("Problem when trying to remove temporary file %s\n" % tiffname) 
     96            finally :     
     97                self.closeFile() 
     98        return result 
     99         
     100    def convertToTiffMultiPage24NC(self, handler) :     
     101        """Converts the input file to TIFF format, X dpi, 24 bits per pixel, uncompressed. 
     102           Returns a temporary filename which names a file containing the TIFF datas. 
     103           The temporary file has to be deleted by the caller. 
     104        """    
     105        self.infile.seek(0) 
     106        (handle, filename) = tempfile.mkstemp(".tmp", "pkpgcounter")     
     107        os.close(handle) 
     108        handler.convertToTiffMultiPage24NC(filename, self.options.resolution) 
     109        return filename 
    73110         
    74111    def openFile(self) :     
     
    180217                            dest="colorspace", 
    181218                            type="cichoice", 
    182                             cichoices=["bw", "cmyk", "cmy", "all"], 
    183                             help="Activate the computation of ink usage, and defines the colorspace to use. Supported values are 'BW', 'CMYK', 'CMY' and 'ALL'.") 
     219                            cichoices=["bw", "rgb", "cmyk", "cmy"], 
     220                            help="Activate the computation of ink usage, and defines the colorspace to use. Supported values are 'BW', 'RGB', 'CMYK', and 'CMY'.") 
    184221    parser.add_option("-r", "--resolution",  
    185222                            type="int",  
     
    201238                try : 
    202239                    parser = PDLAnalyzer(arg, options) 
    203                     totalsize += parser.getJobSize() 
     240                    if not options.colorspace : 
     241                        totalsize += parser.getJobSize() 
     242                    else : 
     243                        result = parser.getInkCoverage() 
     244                        totalsize += len(result) 
     245                        print result 
    204246                except (IOError, pdlparser.PDLParserError), msg :     
    205247                    sys.stderr.write("ERROR: %s\n" % msg)