[Python-modules-commits] [python-odf] 51/118: New photoalbum
Wolfgang Borgert
debacle at moszumanska.debian.org
Fri Oct 3 21:27:21 UTC 2014
This is an automated email from the git hooks/post-receive script.
debacle pushed a commit to reference refs/remotes/upstream/master
in repository python-odf.
commit 5cc2fa3b065e833f44f83ffa6b52334eae07c32e
Author: Søren Roug <soren.roug at eea.europa.eu>
Date: Sun Mar 15 17:33:12 2009 +0000
New photoalbum
---
examples/photoalbum.py | 175 ++++++++++++++++++++++++++++++++++++-------------
1 file changed, 128 insertions(+), 47 deletions(-)
diff --git a/examples/photoalbum.py b/examples/photoalbum.py
index 9655ecc..0acd258 100644
--- a/examples/photoalbum.py
+++ b/examples/photoalbum.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
-# Copyright (C) 2007 Søren Roug, European Environment Agency
+# Copyright (C) 2007-2009 Søren Roug, European Environment Agency
#
# This is free software. You may redistribute it under the terms
# of the Apache license and the GNU General Public License Version
@@ -17,55 +17,136 @@
#
# Contributor(s):
#
-
+import os,sys,struct
+from cStringIO import StringIO
from odf.opendocument import OpenDocumentPresentation
from odf.style import Style, MasterPage, PageLayout, PageLayoutProperties, \
TextProperties, GraphicProperties, ParagraphProperties, DrawingPageProperties
from odf.text import P
from odf.draw import Page, Frame, TextBox, Image
-doc = OpenDocumentPresentation()
-
-# We must describe the dimensions of the page
-pagelayout = PageLayout(name="MyLayout")
-doc.automaticstyles.addElement(pagelayout)
-pagelayout.addElement(PageLayoutProperties(margin="0cm", pagewidth="28cm", pageheight="21cm", printorientation="landscape"))
-
-# Style for the title frame of the page
-# We set a centered 34pt font with yellowish background
-titlestyle = Style(name="MyMaster-title", family="presentation")
-titlestyle.addElement(ParagraphProperties(textalign="center"))
-titlestyle.addElement(TextProperties(fontsize="34pt"))
-titlestyle.addElement(GraphicProperties(fillcolor="#ffff99"))
-doc.styles.addElement(titlestyle)
-
-# Style for the photo frame
-photostyle = Style(name="MyMaster-photo", family="presentation")
-doc.styles.addElement(photostyle)
-
-# Create automatic transition
-dpstyle = Style(name="dp1", family="drawing-page")
-dpstyle.addElement(DrawingPageProperties(transitiontype="automatic",
- transitionstyle="move-from-top", duration="PT5S"))
-doc.automaticstyles.addElement(dpstyle)
-
-# Every drawing page must have a master page assigned to it.
-masterpage = MasterPage(name="MyMaster", pagelayoutname=pagelayout)
-doc.masterstyles.addElement(masterpage)
-
-# Slides
-for picture in [('forum.jpg','Forum Romanum'),('coloseum.jpg','Coloseum')]:
- page = Page(stylename=dpstyle, masterpagename=masterpage)
- doc.presentation.addElement(page)
- titleframe = Frame(stylename=titlestyle, width="25cm", height="2cm", x="1.5cm", y="0.5cm")
- page.addElement(titleframe)
- textbox = TextBox()
- titleframe.addElement(textbox)
- textbox.addElement(P(text=picture[1]))
-
- photoframe = Frame(stylename=photostyle, width="25cm", height="18.75cm", x="1.5cm", y="2.5cm")
- page.addElement(photoframe)
- href = doc.addPicture(picture[0])
- photoframe.addElement(Image(href=href))
-
-doc.save("trip-to-rome", True)
+
+def getImageInfo(data):
+ size = len(data)
+ height = -1
+ width = -1
+ w = -1
+ h = -1
+ content_type = ''
+
+ # handle GIFs
+ if (size >= 10) and data[:6] in ('GIF87a', 'GIF89a'):
+ # Check to see if content_type is correct
+ content_type = 'image/gif'
+ w, h = struct.unpack("<HH", data[6:10])
+ width = int(w)
+ height = int(h)
+
+ # See PNG v1.2 spec (http://www.cdrom.com/pub/png/spec/)
+ # Bytes 0-7 are below, 4-byte chunk length, then 'IHDR'
+ # and finally the 4-byte width, height
+ elif ((size >= 24) and (data[:8] == '\211PNG\r\n\032\n')
+ and (data[12:16] == 'IHDR')):
+ content_type = 'image/png'
+ w, h = struct.unpack(">LL", data[16:24])
+ width = int(w)
+ height = int(h)
+
+ # Maybe this is for an older PNG version.
+ elif (size >= 16) and (data[:8] == '\211PNG\r\n\032\n'):
+ # Check to see if we have the right content type
+ content_type = 'image/png'
+ w, h = struct.unpack(">LL", data[8:16])
+ width = int(w)
+ height = int(h)
+
+ # handle JPEGs
+ elif (size >= 2) and (data[:2] == '\377\330'):
+ content_type = 'image/jpeg'
+ jpeg = StringIO(data)
+ jpeg.read(2)
+ b = jpeg.read(1)
+ try:
+ while (b and ord(b) != 0xDA):
+ while (ord(b) != 0xFF): b = jpeg.read(1)
+ while (ord(b) == 0xFF): b = jpeg.read(1)
+ if (ord(b) >= 0xC0 and ord(b) <= 0xC3):
+ jpeg.read(3)
+ h, w = struct.unpack(">HH", jpeg.read(4))
+ break
+ else:
+ jpeg.read(int(struct.unpack(">H", jpeg.read(2))[0])-2)
+ b = jpeg.read(1)
+ width = int(w)
+ height = int(h)
+ except: pass
+
+ return content_type, width, height
+
+if __name__ == '__main__':
+ outfilename = "photoalbum.odp"
+
+ doc = OpenDocumentPresentation()
+
+ # We must describe the dimensions of the page
+ pagelayout = PageLayout(name="MyLayout")
+ doc.automaticstyles.addElement(pagelayout)
+ pagelayout.addElement(PageLayoutProperties(margin="0pt", pagewidth="800pt",
+ pageheight="600pt", printorientation="landscape"))
+
+ # Style for the title frame of the page
+ # We set a centered 34pt font with yellowish background
+ titlestyle = Style(name="MyMaster-title", family="presentation")
+ titlestyle.addElement(ParagraphProperties(textalign="center"))
+ titlestyle.addElement(TextProperties(fontsize="34pt"))
+ titlestyle.addElement(GraphicProperties(fillcolor="#ffff99"))
+ doc.styles.addElement(titlestyle)
+
+ # Style for the photo frame
+ photostyle = Style(name="MyMaster-photo", family="presentation")
+ doc.styles.addElement(photostyle)
+
+ # Create automatic transition
+ dpstyle = Style(name="dp1", family="drawing-page")
+ dpstyle.addElement(DrawingPageProperties(transitiontype="automatic",
+ transitionstyle="move-from-top", duration="PT5S"))
+ doc.automaticstyles.addElement(dpstyle)
+
+ # Every drawing page must have a master page assigned to it.
+ masterpage = MasterPage(name="MyMaster", pagelayoutname=pagelayout)
+ doc.masterstyles.addElement(masterpage)
+
+ if len(sys.argv) == 1:
+ pict_dir = "."
+ else:
+ pict_dir = sys.argv[1]
+ # Slides
+ for picture in os.listdir(pict_dir):
+ try:
+ pictdata = open(pict_dir + "/" + picture).read()
+ except:
+ continue
+ ct,w,h = getImageInfo(pictdata) # Get dimensions in pixels
+ if ct != 'image/jpeg':
+ continue
+ if w > 720:
+ h = float(h) * 720.0 / float(w)
+ w = 720.0
+ if h > 540.0:
+ w = float(w) * 540.0 / float(h)
+ h = 540.0
+
+ page = Page(stylename=dpstyle, masterpagename=masterpage)
+ doc.presentation.addElement(page)
+ titleframe = Frame(stylename=titlestyle, width="720pt", height="56pt", x="40pt", y="10pt")
+ page.addElement(titleframe)
+ textbox = TextBox()
+ titleframe.addElement(textbox)
+ textbox.addElement(P(text=picture))
+
+ photoframe = Frame(stylename=photostyle, width="%fpt" % w, height="%fpt" % h, x="40pt", y="56pt")
+ page.addElement(photoframe)
+ href = doc.addPicture(pict_dir + "/" + picture)
+ photoframe.addElement(Image(href=href))
+
+ doc.save(outfilename)
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/python-modules/packages/python-odf.git
More information about the Python-modules-commits
mailing list