Changeset 5552


Ignore:
Timestamp:
04/08/09 09:43:23 (10 years ago)
Author:
pnorton
Message:

Attempted to fix the problems with anti-aliasing and transparent backgrounds.

I found that the agg backend was using a white background to do the antialiasing rather than using the alpha layer so I moved to the cairo backend.

This required modifying the filtered_basemap.py to get it to work.

I've also removed the log.setLevel(logging.DEBUG) statements as they were affecting pasters handling of the loggers.

Location:
qesdi/geoplot/trunk/lib/geoplot
Files:
23 edited

Legend:

Unmodified
Added
Removed
  • qesdi/geoplot/trunk/lib/geoplot/colour_bar.py

    r5530 r5552  
    1616 
    1717log = logging.getLogger(__name__) 
    18 log.setLevel(logging.DEBUG) 
    1918 
    2019FONTS_SECTION = 'Fonts' 
  • qesdi/geoplot/trunk/lib/geoplot/config.py

    r5403 r5552  
    1515 
    1616log = logging.getLogger(__name__) 
    17 log.setLevel(logging.DEBUG) 
    1817 
    1918intPattern = re.compile('^\-?\d+$') 
  • qesdi/geoplot/trunk/lib/geoplot/contour_drawer.py

    r5530 r5552  
    3333#setup the logging 
    3434log = logging.getLogger(__name__) 
    35 log.setLevel(logging.DEBUG) 
    3635 
    3736class ContourDrawer(object): 
  • qesdi/geoplot/trunk/lib/geoplot/filtered_basemap.py

    r5412 r5552  
    1 import time 
    21''' 
    32Created on 18 Jun 2009 
     
    54@author: pnorton 
    65''' 
     6 
     7import time 
     8import logging 
     9 
    710from mpl_toolkits.basemap import Basemap 
    811 
    912from matplotlib.collections import LineCollection 
     13 
     14log = logging.getLogger(__name__) 
    1015 
    1116class Line(object): 
     
    3944            ax = self.ax 
    4045         
    41         print "self.coastsegs has %s lines and %s points" % (len(self.coastsegs), 
    42                                                              sum([len(x) for x in self.coastsegs])) 
     46#        print "self.coastsegs has %s lines and %s points" % (len(self.coastsegs), 
     47#                                                             sum([len(x) for x in self.coastsegs])) 
    4348         
    4449        xLimitsMapUnits, yLimitsMapUnits = self.__call__(xLimits, yLimits) 
     
    4651        segs = self.__getSegments(xLimitsMapUnits, yLimitsMapUnits) 
    4752 
    48         print "segs has %s lines and %s points" % (len(segs), 
    49                                         sum([len(x) for x in segs])) 
    50  
     53        log.debug("segs has %s lines and %s points" % (len(segs), 
     54                                        sum([len(x) for x in segs]))) 
     55         
     56        self._cairoLengthFix(segs) 
     57 
     58                 
    5159#        width = (xLimits[1] - xLimits[0]) 
    5260#        height = (yLimits[1] - yLimits[0]) 
     
    167175         
    168176        return segs 
    169  
     177     
     178    def _cairoLengthFix(self, segs): 
     179        """ 
     180        There is a limit on the length of lines that can be handled by the  
     181        cairo renderer, some of the segments lines are longer than this so 
     182        they need to be split up if they are to work with the cairo renderer. 
     183        """ 
     184         
     185        #!TODO: tidy this code up 
     186         
     187        newLines = [] 
     188        removeLines = [] 
     189         
     190        for i, x in enumerate(segs): 
     191 
     192            if len(x) > 18000: 
     193                log.debug("found i =%s len(x) = %s" % (i, len(x))) 
     194                removeLines.append(i) 
     195                 
     196                step = 18000 
     197                for i in range(100): 
     198                    f = step*i 
     199                    to = step*(i+1) -1 
     200                    if to > len(x): 
     201                        to = len(x) 
     202 
     203                    # can't draw a line with one point, make sure there 
     204                    # are at least 2 included 
     205                    if f - to == 1: 
     206                        f -= 1 
     207                         
     208                    newLines.append(x[f:to]) 
     209                     
     210                    if to == len(x): 
     211                        break 
     212         
     213        #remove the long lines 
     214        removeLines.reverse() 
     215        for i in removeLines: 
     216            segs.pop(i) 
     217         
     218        #add the new segments back in 
     219        [segs.append(x) for x in newLines] 
     220         
     221         
    170222 
    171223def ispointInLimits(point, xLimits, yLimits): 
  • qesdi/geoplot/trunk/lib/geoplot/grid.py

    r5403 r5552  
    1515#setup the logging 
    1616log = logging.getLogger(__name__) 
    17 log.setLevel(logging.DEBUG) 
    1817 
    1918class Grid(object): 
  • qesdi/geoplot/trunk/lib/geoplot/grid_builder_base.py

    r5403 r5552  
    2323#set the log 
    2424log = logging.getLogger(__name__) 
    25 log.setLevel(logging.DEBUG) 
    2625 
    2726class GridBuilderBase(object): 
  • qesdi/geoplot/trunk/lib/geoplot/grid_builder_lat_lon.py

    r5412 r5552  
    2121#set the log 
    2222log = logging.getLogger(__name__) 
    23 log.setLevel(logging.DEBUG) 
    2423 
    2524class GridBuilderLatLon(GridBuilderBase): 
  • qesdi/geoplot/trunk/lib/geoplot/grid_builder_national.py

    r5403 r5552  
    2525#setup the logging 
    2626log = logging.getLogger(__name__) 
    27 log.setLevel(logging.DEBUG) 
    2827 
    2928# National Grid parameters 
  • qesdi/geoplot/trunk/lib/geoplot/grid_builder_rotated.py

    r5412 r5552  
    2828#setup the logging 
    2929log = logging.getLogger(__name__) 
    30 log.setLevel(logging.DEBUG) 
    31  
    3230 
    3331class GridBuilderRotated(GridBuilderBase): 
  • qesdi/geoplot/trunk/lib/geoplot/grid_drawer.py

    r5530 r5552  
    1111import operator 
    1212import re 
     13import time 
    1314from math import * 
    1415 
     
    3031#setup the logging 
    3132log = logging.getLogger(__name__) 
    32 log.setLevel(logging.DEBUG) 
    3333 
    3434class GridDrawer(object): 
     
    164164#            log.debug("grid_mapUnits.midpointsY.shape = %s" % (grid_mapUnits.midpointsY.shape,)) 
    165165#            log.debug("grid_mapUnits.values.shape = %s" % (grid_mapUnits.values.shape,)) 
    166              
    167             sm = axes.pcolormesh(grid_mapUnits.boundsX,  
    168                                  grid_mapUnits.boundsY,  
    169                                  grid_mapUnits.values, **kwargs) 
    170              
    171 #            extent=(grid_mapUnits.boundsX.min(), grid_mapUnits.boundsX.max(), 
    172 #                    grid_mapUnits.boundsY.min(), grid_mapUnits.boundsY.max()) 
    173              
    174 # 
    175 #            im = axes.imshow(grid_mapUnits.values, extent=extent, 
    176 ##                 vmin=cmapRange[0], vmax=cmapRange[1], 
    177 #                 interpolation='nearest', 
    178 ##                 interpolation='bicubic', 
    179 ##                 interpolation='bilinear', 
    180 #                 norm=norm 
    181 #            ) 
    182 #            log.debug("extent = %s" % (extent,)) 
     166            
     167            
    183168#             
    184 #            axes.set_aspect('auto') 
     169#            st = time.time() 
    185170#             
    186 #            sm = matplotlib.collections.Collection() 
    187 #            sm.set_array(N.array([0,1]))             
     171#            sm = axes.pcolormesh(grid_mapUnits.boundsX,  
     172#                                 grid_mapUnits.boundsY,  
     173#                                 grid_mapUnits.values, **kwargs) 
    188174#             
    189 #             
    190 #            log.debug("extent = %s" % (extent,)) 
    191 #             
    192 #            CS = axes.contour(grid_mapUnits.midpointsX,  
    193 #                              grid_mapUnits.midpointsY,  
    194 #                              grid_mapUnits.values, 
    195 #                              levels, 
    196 #                 cmap=matplotlib.cm.gray, 
    197 #                 origin='lower', 
    198 #                 linewidths=1, 
    199 #                 norm=norm, 
    200 #                 extend='neither', 
    201 #                 ) 
    202 #             
    203 #            axes.clabel(CS) 
    204 #             
    205 #            axes.set_aspect('auto') 
     175#            log.debug("drawn mesh in %s" % (time.time() - st ,)) 
     176#            
     177            
     178            st = time.time() 
     179            
     180             
     181            boundsMin = grid_mapUnits.boundsY[0,0] 
     182            boundsMax = grid_mapUnits.boundsY[-1,-1] 
     183             
     184            log.debug("boundsMin = %s" % (boundsMin,)) 
     185            log.debug("boundsMax = %s" % (boundsMax,)) 
     186             
     187            if boundsMin < boundsMax: 
     188                extent=(grid_mapUnits.boundsX.min(), grid_mapUnits.boundsX.max(), 
     189                        grid_mapUnits.boundsY.max(), grid_mapUnits.boundsY.min())                 
     190            else: 
     191                extent=(grid_mapUnits.boundsX.min(), grid_mapUnits.boundsX.max(), 
     192                        grid_mapUnits.boundsY.min(), grid_mapUnits.boundsY.max()) 
     193             
     194             
     195 
     196            im = axes.imshow(grid_mapUnits.values, extent=extent, 
     197#                 vmin=cmapRange[0], vmax=cmapRange[1], 
     198                 interpolation='nearest', 
     199#                 interpolation='bicubic', 
     200#                 interpolation='bilinear', 
     201                 norm=norm, 
     202                 cmap=kwargs['cmap'], 
     203            ) 
     204             
     205            sm = matplotlib.collections.Collection() 
     206            sm.set_array(N.array([0,1])) 
     207                         
     208            axes.set_aspect('auto') 
     209             
     210            log.debug("drawn imshow in %s" % (time.time() - st ,)) 
    206211                         
    207212        else: 
  • qesdi/geoplot/trunk/lib/geoplot/layer_drawer.py

    r5412 r5552  
    1212 
    1313from matplotlib.figure import Figure 
    14 from matplotlib.backends.backend_agg import FigureCanvasAgg 
    1514 
    1615from geoplot.grid_builder_lat_lon import GridBuilderLatLon 
     
    4746        Creates a PIL image of the selected area of the layer. 
    4847        """ 
    49          
     48        st = time.time() 
    5049        fig = self._getFigure(width, height, dpi) 
    5150         
     
    5756         
    5857        im = geoplot_utils.figureToImage(fig) 
     58         
     59        log.debug("drawn layer in %s" % (time.time() -st ,)) 
    5960         
    6061        return im 
     
    8990        then the Figure's frameon should be set to true not the axis. 
    9091        """ 
    91         axes = figure.add_axes([0.0, 0.0, 1.0, 1.0], xticks=[], yticks=[], 
    92                              frameon=False) 
     92        axes = figure.add_axes([0.0, 0.0, 1.0, 1.0],  
     93                               xticks=[], yticks=[], frameon=False) 
     94         
     95        if self.transparent: 
     96            axes.set_alpha(0.0) 
     97            axes.patch.set_alpha(0.0) 
    9398         
    9499        return axes 
  • qesdi/geoplot/trunk/lib/geoplot/map_base.py

    r5403 r5552  
    1616 
    1717log = logging.getLogger(__name__) 
    18 log.setLevel(logging.DEBUG) 
    1918 
    2019BASEMAP_RESOLUTION = 'i' 
  • qesdi/geoplot/trunk/lib/geoplot/map_lat_lon.py

    r5403 r5552  
    1212 
    1313log = logging.getLogger(__name__) 
    14 log.setLevel(logging.DEBUG) 
    1514 
    1615#BASEMAP_RESOLUTION = 'i' 
     
    3029def addBasemap(resolution): 
    3130     
     31    st = time.time() 
     32     
    3233    llBasemaps[resolution] = \ 
    3334        FilteredBasemap(lon_0=0.0, lat_0=0.0, 
     
    3839                    resolution=resolution, 
    3940                    suppress_ticks=False) 
     41     
     42    log.debug("Added basemap with resolution %s in %ss" % (resolution, time.time() - st)) 
    4043 
    4144class MapLatLon(MapBase): 
  • qesdi/geoplot/trunk/lib/geoplot/map_national_grid.py

    r5412 r5552  
    1616 
    1717log = logging.getLogger(__name__) 
    18 log.setLevel(logging.DEBUG) 
    1918 
    2019BASEMAP_RESOLUTION = 'l' 
  • qesdi/geoplot/trunk/lib/geoplot/metadata_box.py

    r5403 r5552  
    77 
    88log = logging.getLogger(__name__) 
    9 log.setLevel(logging.DEBUG) 
    109 
    1110FONTS_SECTION = 'Fonts' 
  • qesdi/geoplot/trunk/lib/geoplot/plot_base.py

    r5403 r5552  
    2828import logging 
    2929log = logging.getLogger(__name__) 
    30 log.setLevel(logging.DEBUG) 
    3130 
    3231DEFAULTS_SECTION = 'PlotBaseDefaults' 
  • qesdi/geoplot/trunk/lib/geoplot/plot_font.py

    r5403 r5552  
    99import logging 
    1010log = logging.getLogger(__name__) 
    11 log.setLevel(logging.DEBUG) 
    1211 
    1312class PlotFont: 
  • qesdi/geoplot/trunk/lib/geoplot/plot_lat_lon.py

    r5403 r5552  
    2121import logging 
    2222log = logging.getLogger(__name__) 
    23 log.setLevel(logging.DEBUG) 
    24  
    2523 
    2624class PlotLatLon(PlotBase): 
  • qesdi/geoplot/trunk/lib/geoplot/plot_national_grid.py

    r5403 r5552  
    2222import logging 
    2323log = logging.getLogger(__name__) 
    24 log.setLevel(logging.DEBUG) 
    2524 
    2625outputsDir = os.path.abspath(pkg_resources.resource_filename('geoplot', '../../outputs')) 
  • qesdi/geoplot/trunk/lib/geoplot/plot_rotated_grid.py

    r5403 r5552  
    2222 
    2323log = logging.getLogger(__name__) 
    24 log.setLevel(logging.DEBUG) 
    2524 
    2625testDataDir = pkg_resources.resource_filename('geoplot', 'tests/data') 
  • qesdi/geoplot/trunk/lib/geoplot/plot_writer.py

    r5403 r5552  
    2727 
    2828log = logging.getLogger(__name__) 
    29 log.setLevel(logging.DEBUG) 
    3029 
    3130PLOT_SECTION = 'PlotProperties' 
  • qesdi/geoplot/trunk/lib/geoplot/plotarea.py

    r5403 r5552  
    2525 
    2626log = logging.getLogger(__name__) 
    27 log.setLevel(logging.DEBUG) 
    28  
    2927 
    3028REGION_SECTION = 'PlotRegions' 
  • qesdi/geoplot/trunk/lib/geoplot/utils.py

    r5412 r5552  
    66 
    77""" 
     8import time 
    89import Image 
    910import StringIO 
     
    1415import matplotlib.backends.backend_agg 
    1516 
    16 from matplotlib.backends.backend_agg import FigureCanvasAgg 
     17 
     18# was having problems with alpha belnding so swapped the backend 
     19#from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas 
     20from matplotlib.backends.backend_cairo import FigureCanvasCairo as FigureCanvas 
    1721 
    1822log = logging.getLogger(__name__)  
     
    6064 
    6165def figureToImage(fig): 
    62     canvas = matplotlib.backends.backend_agg.FigureCanvasAgg(fig) 
     66    st = time.time() 
    6367     
    64          
    65     canvas.draw() 
     68    canvas = FigureCanvas(fig) 
    6669     
    67     size = canvas.get_width_height() 
    68  
    69     buffer = canvas.buffer_rgba(0,0) 
     70#    canvas.print_figure('/tmp/tmp.png') 
    7071     
    71     im = Image.fromstring('RGBA', size, buffer, 'raw', 'RGBA', 0, 1) 
     72     
     73    # a shortcut with the agg backend 
     74#    canvas.draw() 
     75#    size = canvas.get_width_height() 
     76#    buffer = canvas.buffer_rgba(0,0) 
     77#    im = Image.fromstring('RGBA', size, buffer, 'raw', 'RGBA', 0, 1) 
    7278     
    7379#    log.debug("im.palette.mode = %s" % (im.palette.mode,)) 
    74     #im..convert("RGBA") 
     80    #im.-convert("RGBA") 
    7581     
    76 #    buffer = StringIO.StringIO() 
    77 #     
    78 #    canvas.print_figure(buffer, facecolor='w') 
    79 #     
    80 #    buffer.seek(0) 
    81 #     
    82 #    im = Image.open(buffer) 
     82    buffer = StringIO.StringIO() 
     83    canvas.print_figure(buffer, dpi=fig.get_dpi(), facecolor=fig.get_facecolor(), edgecolor=fig.get_edgecolor()) 
     84    buffer.seek(0)     
     85    im = Image.open(buffer) 
     86     
     87#    canvas.print_figure('/tmp/tmp.png', dpi=fig.get_dpi(), facecolor=fig.get_facecolor(), edgecolor=fig.get_edgecolor()) 
     88#    fin = open(file,'rb') 
     89#    im = Image.open(fin) 
     90     
     91    log.debug("converted figure to image in %s" % (time.time() - st,)) 
    8392     
    8493    return im   
Note: See TracChangeset for help on using the changeset viewer.