Img = Image.open (fp) AttributeError: class Image does not have the attribute 'open'

I want to put photos in a PDF file. My code should be ...

import sys import xlrd from PIL import Image import ImageEnhance from reportlab.platypus import * from reportlab.lib.styles import getSampleStyleSheet from reportlab.rl_config import defaultPageSize PAGE_HEIGHT=defaultPageSize[1] styles = getSampleStyleSheet() Title = "Integrating Diverse Data Sources with Gadfly 2" Author = "Aaron Watters" URL = "http://www.chordate.com/" email = "arw@ifu.net" from reportlab.lib.units import inch pageinfo = "%s / %s / %s" % (Author, email, Title) def myFirstPage(canvas, doc): canvas.saveState() #canvas.setStrokeColorRGB(1,0,0) #canvas.setLineWidth(5) #canvas.line(66,72,66,PAGE_HEIGHT-72) canvas.setFont('Times-Bold',16) canvas.drawString(108, PAGE_HEIGHT-108, Title) canvas.setFont('Times-Roman',9) canvas.drawString(inch, 0.75 * inch, "First Page / %s" % pageinfo) canvas.restoreState() def myLaterPages(canvas, doc): #canvas.drawImage("snkanim.gif", 36, 36) canvas.saveState() #canvas.setStrokeColorRGB(1,0,0) #canvas.setLineWidth(5) #canvas.line(66,72,66,PAGE_HEIGHT-72) canvas.setFont('Times-Roman',9) canvas.drawString(inch, 0.75 * inch, "Page %d %s" % (doc.page, pageinfo)) canvas.restoreState() def go(): Elements.insert(0,Spacer(0,inch)) doc = SimpleDocTemplate('ss.pdf') doc.build(Elements,onFirstPage=myFirstPage, onLaterPages=myLaterPages) Elements = [] HeaderStyle = styles["Heading1"] # XXXX def header(txt, style=HeaderStyle, klass=Paragraph, sep=0.3): s = Spacer(0.2*inch, sep*inch) Elements.append(s) para = klass(txt, style) Elements.append(para) ParaStyle = styles["Normal"] def p(txt): return header(txt, style=ParaStyle, sep=0.1) def open_excel(file= 'exc.xls'): try: data = xlrd.open_workbook(file) return data except Exception,e: print str(e) #pre = p # XXX PreStyle = styles["Code"] def pre(txt): s = Spacer(0.1*inch, 0.1*inch) Elements.append(s) p = Preformatted(txt, PreStyle) Elements.append(p) p("""\ Relational databases manipulate and store persistent table structures called relations, such as the following three tables""") fp = open("/pdf-ex/downloadwin7.png","rb") img = Image.open(fp) img.show() # HACK Elements.append(PageBreak()) go() 
+8
python image pdf
source share
1 answer

You have a namespace conflict. One of your import statements masks PIL.Image (which is a module, not a class) with some class called Image .

Instead...

 from PIL import Image 

try ...

 import PIL.Image 

and then in your code ...

 fp = open("/pdf-ex/downloadwin7.png","rb") img = PIL.Image.open(fp) img.show() 

When dealing with large amounts of imports, be careful with namespace conflicts. In general, I am very careful about the statements from some_module import * .

Good luck with your project and happy coding.

+14
source share

All Articles