Moving image resize code up to when img is collected rather than written.

This commit is contained in:
Jim Miller 2012-02-23 20:32:24 -06:00
parent ba9b82657a
commit f0006a7db7
3 changed files with 29 additions and 8 deletions

View file

@ -261,7 +261,7 @@ class BaseSiteAdapter(Configurable):
if self.getConfig('include_images'):
acceptable_attributes.extend(('src','alt'))
for img in soup.findAll('img'):
img['src']=self.story.addImgUrl(url,img['src'],self._fetchUrlRaw)
img['src']=self.story.addImgUrl(self,url,img['src'],self._fetchUrlRaw)
for attr in soup._getAttrMap().keys():
if attr not in acceptable_attributes:

View file

@ -21,6 +21,22 @@ from base64 import b64encode
from htmlcleanup import conditionalRemoveEntities, removeAllEntities
# Create convert_image method depending on which graphics lib we can
# load. Preferred: calibre, PIL, none
try:
from calibre.utils.magick.draw import minify_image
def convert_image(data,sizes,grayscale):
img = minify_image(data, minify_to=sizes)
if grayscale:
img.type = "GrayscaleType"
return img.export('JPG')
except:
# Problem: writer_epub assumes image is jpg.
def convert_image(data,sizes,grayscale):
return data
# The list comes from ffnet, the only multi-language site we support
# at the time of writing. Values are taken largely from pycountry,
# but with some corrections and guesses.
@ -160,7 +176,7 @@ class Story:
# pass fetch in from adapter in case we need the cookies collected
# as well as it's a base_story class method.
def addImgUrl(self,parenturl,url,fetch):
def addImgUrl(self,configurable,parenturl,url,fetch):
if url.startswith("http") :
imgurl = url
elif parenturl != None:
@ -188,7 +204,11 @@ class Story:
parsedUrl = urlparse.urlparse(imgurl)
# newsrc = "images/%s.jpg"%(
# self.imgurls.index(imgurl))
data = fetch(imgurl)
sizes = [ int(x) for x in configurable.getConfigList('image_max_size') ]
data = convert_image(fetch(imgurl),
sizes,
configurable.getConfig('grayscale_images'))
print("\nimgurl\nimage size:%d\n"%len(data))
self.imgurldata.append((newsrc,data))
# else:
# newsrc = "images/%s.jpg"%(

View file

@ -278,16 +278,17 @@ ${value}<br />
itemrefs.append("file%04d"%i)
if self.getConfig('include_images'):
from calibre.utils.magick.draw import minify_image
#from calibre.utils.magick.draw import minify_image
imgcount=0
sizes = [ int(x) for x in self.getConfigList('image_max_size') ]
for (newsrc,data) in self.story.getImgUrls():
imgfile = "OEBPS/"+newsrc
saveimg = minify_image(data, minify_to=sizes)
if self.getConfig('grayscale_images'):
saveimg.type = "GrayscaleType"
outputepub.writestr(imgfile,saveimg.export('JPG'))
# saveimg = minify_image(data, minify_to=sizes)
# if self.getConfig('grayscale_images'):
# saveimg.type = "GrayscaleType"
# outputepub.writestr(imgfile,saveimg.export('JPG'))
outputepub.writestr(imgfile,data)
items.append(("image%04d"%imgcount,
imgfile,
"image/jpeg",