def generate_image(width, height): renderer = StaticRenderer() renderer.setTree(GVTBuilder().build(context, document)) transform = AffineTransform() transform.translate(-svg_x, -svg_y) transform.scale(width / svg_width, height / svg_height) renderer.setTransform(transform) renderer.updateOffScreen(width, height) renderer.repaint(Rectangle(0, 0, width, height)) return renderer.getOffScreen()
def add_text_to_image(editable_image, text, font, color, x, y, size=10.0, text_width=None, text_height=None): assert isinstance(editable_image, BufferedImage), "No *editable* image (instance of ImageIO) given!" assert len(text) > 0, "No or empty text given..." assert isinstance(font, Font), "No valid font given! Should be instance of java.awt.Font!" assert isinstance(color, Color), "No valid color given! Should be instance of java.awt.Color!" assert isinstance(x, float), "No valid number given! Should be a float value" assert isinstance(y, float), "No valid number given! Should be a float value" assert width is None or isinstance(width, float) assert height is None or isinstance(height, float) text = text.replace("\r", "\n") print text g = editable_image.getGraphics() g.setFont(font) g.setColor(color) # in case no stretchin if (text_width and text_height) is None: g.drawString(text, x, y) g.dispose() return editable_image g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON) stretch = AffineTransform() color_tmp = Color(0, 0, 1, 0.0) g.setColor(color_tmp) g.drawString(text, x, y) g.setColor(color) # note first string is only made to get text width of g # TODO if possible remove first text string original_text_width = g.getFontMetrics(font).stringWidth(text) original_text_height = g.getFontMetrics(font).getHeight() assert isinstance(original_text_height, int) assert isinstance(original_text_width, int) # print(original_text_width) # print(original_text_height) if text_width is None: text_width = original_text_width if text_height is None: text_height = original_text_height factor_x = float(text_width) / original_text_width factor_y = float(text_height) / original_text_height stretch.scale(factor_x, factor_y) g.setTransform(stretch) g.drawString(text, x, y) g.dispose() return editable_image
def _getArea(self): h = int((self._get("scale") * self._get("height"))) w = int((self._get("scale") * self._get("width"))) p = self._get("position") center = self._get("center") theta = self._get("rotation") #ar = Area(Rectangle2D.Double(-center.x, -center.y, 1, 1)) ar = self._area(self, center) g = AffineTransform() g.translate(p.x, p.y) g.rotate(theta) g.scale(w, h) ar.transform(g) return ar
def draw(g, size=(500, 500)): """ Draws a geometry onto a canvas. *size* is a tuple that specifies the dimensions of the canvas the geometry will drawn upon. """ buf = 50.0 if not isinstance(g, list): g = [g] e = _fac.createGeometryCollection(g).getEnvelopeInternal() scale = size[0] / e.width if e.width > 0 else sys.maxint scale = min(scale, size[1] / e.height) if e.height > 0 else 1 tx = -1 * e.minX ty = -1 * e.minY at = AffineTransform() # scale to size of canvas (inverting the y axis) at.scale(scale, -1 * scale) # translate to the origin at.translate(tx, ty) # translate to account for invert at.translate(0, -1 * size[1] / scale) # buffer at.translate(buf / scale, -1 * buf / scale) class Panel(swing.JPanel): def __init__(self, geoms, atx): self.geoms = geoms self.atx = atx def paintComponent(self, gc): opaque = gc.getComposite() gc.setRenderingHint(awt.RenderingHints.KEY_ANTIALIASING, awt.RenderingHints.VALUE_ANTIALIAS_ON) gc.setStroke(awt.BasicStroke(2)) i = 0 for g in self.geoms: shp = LiteShape(g, self.atx, False) if isinstance(g, (Polygon, MultiPolygon)): i = i + 1 gc.setColor(awt.Color.WHITE) gc.setComposite( awt.AlphaComposite.getInstance( awt.AlphaComposite.SRC_OVER, 0.5)) gc.fill(shp) gc.setComposite(opaque) gc.setColor(awt.Color.BLACK) gc.draw(shp) panel = Panel(g, at) s = tuple([int(size[x] + 2 * buf) for x in range(2)]) panel.preferredSize = s frame = swing.JFrame() frame.contentPane = panel frame.pack() frame.visible = True
def draw(g, size=(500,500)): """ Draws a geometry onto a canvas. *size* is a tuple that specifies the dimensions of the canvas the geometry will drawn upon. """ buf = 50.0 if not isinstance(g, list): g = [g] e = _fac.createGeometryCollection(g).getEnvelopeInternal() scale = size[0] / e.width if e.width > 0 else sys.maxint scale = min(scale, size[1] / e.height) if e.height > 0 else 1 tx = -1*e.minX ty = -1*e.minY at = AffineTransform() # scale to size of canvas (inverting the y axis) at.scale(scale,-1*scale) # translate to the origin at.translate(tx,ty) # translate to account for invert at.translate(0,-1*size[1]/scale) # buffer at.translate(buf/scale,-1*buf/scale) class Panel(swing.JPanel): def __init__(self, geoms, atx): self.geoms = geoms self.atx = atx def paintComponent(self, gc): opaque = gc.getComposite() gc.setRenderingHint(awt.RenderingHints.KEY_ANTIALIASING, awt.RenderingHints.VALUE_ANTIALIAS_ON) gc.setStroke(awt.BasicStroke(2)) i = 0 for g in self.geoms: shp = LiteShape(g, self.atx, False) if isinstance(g, (Polygon, MultiPolygon)): i = i + 1 gc.setColor(awt.Color.WHITE) gc.setComposite(awt.AlphaComposite.getInstance(awt.AlphaComposite.SRC_OVER, 0.5)) gc.fill(shp) gc.setComposite(opaque) gc.setColor(awt.Color.BLACK) gc.draw(shp) panel = Panel(g, at) s = tuple([int(size[x]+2*buf) for x in range(2)]) panel.preferredSize = s frame = swing.JFrame() frame.contentPane = panel frame.pack() frame.visible = True