def convert_image(self, audiofile): path, ext = splitfilename(audiofile.filename) if audiofile.tags: for k in audiofile.tags: if k == "APIC:thumbnail": with open("{}.thumb2".format(path), "wb") as fout: fout.write(audiofile.tags[k].data) pic = Image.open(path + ".thumb2") width = pic.size[0] height = pic.size[1] if width > height: newwidth = 320 newheight = height * newwidth / width else: newheight = 320 newwidth = width * newheight / height pic = pic.resize((newwidth, newheight), Image.ANTIALIAS) pic.save(path + ".thumb2", "jpeg") self.files.append( File(path + ".thumb2", "presentation", audiofile.tags[k].mime)) break
def makePresentationFormat(self, audiofile): path, ext = splitfilename(audiofile.filename) if audiofile.tags: for k in audiofile.tags: if k == "APIC:thumbnail": fout = open(path + ".thumb2", "wb") fout.write(audiofile.tags[k].data) fout.close() pic = Image.open(path + ".thumb2") width = pic.size[0] height = pic.size[1] if width > height: newwidth = 320 newheight = height * newwidth / width else: newheight = 320 newwidth = width * newheight / height pic = pic.resize((newwidth, newheight), Image.ANTIALIAS) pic.save(path + ".thumb2", "jpeg") self.addFile( FileNode(name=path + ".thumb2", type="presentation", mimetype=audiofile.tags[k].mime)) break
def makeAudioThumb(self, audiofile): ret = None path, ext = splitfilename(audiofile.abspath) if not audiofile.abspath.endswith(".mp3"): ret = path + ".mp3" utils.process.call(("lame", "-V", "4", "-q", audiofile.abspath, ret)) self.files.append(File(path + ".mp3", "mp3", "audio/mpeg")) return ret
def makeAudioThumb(self, audiofile): ret = None path, ext = splitfilename(audiofile.retrieveFile()) if not audiofile.retrieveFile().endswith(".mp3"): os.system("lame -V 4 -q %s %s" % (audiofile.retrieveFile(), path + ".mp3")) ret = path + ".mp3" self.addFile(FileNode(name=path + ".mp3", type="mp3", mimetype="audio/mpeg")) return ret
def event_files_changed(self): for f in self.getFiles(): if f.type in ["thumb", "presentation"]: self.removeFile(f) nodefiles = self.getFiles() if len(nodefiles) == 1 and nodefiles[0].mimetype == "video/quicktime": if nodefiles[0].retrieveFile().endswith('.mov'): # handle mov -> flv flvname = "%sflv" % nodefiles[0].retrieveFile()[:-3] ret = os.system("ffmpeg -loglevel quiet -i %s -ar 44100 -ab 128 -f flv %s" % (nodefiles[0].retrieveFile(), flvname)) if ret & 0xff00: return self.addFile(FileNode(name=flvname, type="video", mimetype="video/x-flv")) #fetch tags to be omitted unwanted_attrs = self.unwanted_attributes() for f in self.getFiles(): if f.type in["original", "video"]: if f.mimetype == "video/x-flv": meta = FLVReader(f.retrieveFile()) for key in meta: if any(tag in key for tag in unwanted_attrs): continue try: self.set(key, int(meta[key])) except: self.set(key, meta[key]) self.set("vid-width", self.get("width")) self.set("vid-height", self.get("height")) tempname = os.path.join(config.get("paths.tempdir"), "tmp.gif") try: os.unlink(tempname) except: pass try: if self.get("system.thumbframe") != "": cmd = "ffmpeg -loglevel quiet -ss %s -i %s -vframes 1 -pix_fmt rgb24 %s" % ( self.get("system.thumbframe"), f.retrieveFile(), tempname) else: cmd = "ffmpeg -loglevel quiet -i %s -vframes 1 -pix_fmt rgb24 %s" % (f.retrieveFile(), tempname) ret = os.system(cmd) if ret & 0xff00: return except: return path, ext = splitfilename(f.retrieveFile()) thumbname = path + ".thumb" thumbname2 = path + ".thumb2" makeThumbNail(tempname, thumbname) makePresentationFormat(tempname, thumbname2) self.addFile(FileNode(name=thumbname, type="thumb", mimetype="image/jpeg")) self.addFile(FileNode(name=thumbname2, type="presentation", mimetype="image/jpeg"))
def processMediaFile(self, dest): for nfile in self.files: if nfile.filetype == "video": filename = nfile.abspath path, ext = splitfilename(filename) try: shutil.copy(filename, dest) except: logg.exception("copying file") return 1
def makeAudioThumb(self, audiofile): ret = None path, ext = splitfilename(audiofile.retrieveFile()) if not audiofile.retrieveFile().endswith(".mp3"): os.system("lame -V 4 -q %s %s" % (audiofile.retrieveFile(), path + ".mp3")) ret = path + ".mp3" self.addFile( FileNode(name=path + ".mp3", type="mp3", mimetype="audio/mpeg")) return ret
def processMediaFile(self, dest): for file in self.files: if file.getType() == "audio": filename = file.abspath path, ext = splitfilename(filename) try: shutil.copy(filename, dest) except: logg.exception("file copy") return 1
def processMediaFile(self, dest): for file in self.getFiles(): if file.getType() == "audio": filename = file.retrieveFile() path, ext = splitfilename(filename) if os.sep == '/': ret = os.system("cp %s %s" % (filename, dest)) else: cmd = "copy %s %s%s.%s" % (filename, dest, self.id, ext) ret = os.system(cmd.replace('/', '\\')) return 1
def event_metafield_changed(self, node, field): if "image" in node.type: items = node.items() # check if there is an original file and modify it in case for f in node.getFiles(): if f.type == "original": path, ext = splitfilename(f.retrieveFile()) pngname = path + "_wm.jpg" for file in node.getFiles(): if file.getType() == "original_wm": node.removeFile(file) break self.watermark(f.retrieveFile(), pngname, node.get(field.getName()), 0.6) node.addFile(FileNode(name=pngname, type="original_wm", mimetype="image/jpeg")) print "watermark created for original file"
def event_metafield_changed(self, node, field): if "image" in node.type: items = node.attrs.items() # check if there is an original file and modify it in case for f in node.getFiles(): if f.type == "original": path, ext = splitfilename(f.abspath) pngname = path + "_wm.jpg" for file in node.getFiles(): if file.getType() == "original_wm": node.files.remove(file) break self.watermark(f.abspath, pngname, node.get(field.getName()), 0.6) node.files.append(File(pngname, "original_wm", "image/jpeg")) db.session.commit() logg.info("watermark created for original file")
def event_metafield_changed(self, node, field): if "image" in node.type: items = node.items() # check if there is an original file and modify it in case for f in node.getFiles(): if f.type == "original": path, ext = splitfilename(f.retrieveFile()) pngname = path + "_wm.jpg" for file in node.getFiles(): if file.getType() == "original_wm": node.removeFile(file) break self.watermark(f.retrieveFile(), pngname, node.get(field.getName()), 0.6) node.addFile( FileNode(name=pngname, type="original_wm", mimetype="image/jpeg")) print "watermark created for original file"
def makeThumbNail(self, audiofile): path, ext = splitfilename(audiofile.filename) if audiofile.tags: for k in audiofile.tags: if k == "APIC:thumbnail": fout = open(path + ".thumb", "wb") fout.write(audiofile.tags[k].data) fout.close() pic = Image.open(path + ".thumb2") width = pic.size[0] height = pic.size[1] if width > height: newwidth = 128 newheight = height * newwidth / width else: newheight = 128 newwidth = width * newheight / height pic = pic.resize((newwidth, newheight), Image.ANTIALIAS) pic.save(path + ".thumb", "jpeg") pic = pic.resize((newwidth, newheight), Image.ANTIALIAS) im = Image.new(pic.mode, (128, 128), (255, 255, 255)) x = (128 - newwidth) / 2 y = (128 - newheight) / 2 im.paste(pic, (x, y, x + newwidth, y + newheight)) draw = ImageDraw.ImageDraw(im) draw.line([(0, 0), (127, 0), (127, 127), (0, 127), (0, 0)], (128, 128, 128)) im = im.convert("RGB") im.save(path + ".thumb", "jpeg") self.addFile( FileNode(name=path + ".thumb", type="thumb", mimetype=audiofile.tags[k].mime)) break
def make_thumbnail_image(self, audiofile): path, ext = splitfilename(audiofile.filename) if audiofile.tags: for k in audiofile.tags: if k == "APIC:thumbnail": with open("{}.thumb".format(path), "wb") as fout: fout.write(audiofile.tags[k].data) pic = Image.open(path + ".thumb2") width = pic.size[0] height = pic.size[1] if width > height: newwidth = 128 newheight = height * newwidth / width else: newheight = 128 newwidth = width * newheight / height pic = pic.resize((newwidth, newheight), Image.ANTIALIAS) pic.save(path + ".thumb", "jpeg") pic = pic.resize((newwidth, newheight), Image.ANTIALIAS) im = Image.new(pic.mode, (128, 128), (255, 255, 255)) x = (128 - newwidth) / 2 y = (128 - newheight) / 2 im.paste(pic, (x, y, x + newwidth, y + newheight)) draw = ImageDraw.ImageDraw(im) draw.line([(0, 0), (127, 0), (127, 127), (0, 127), (0, 0)], (128, 128, 128)) im = im.convert("RGB") im.save(path + ".thumb", "jpeg") self.files.append( File(path + ".thumb", "thumb", audiofile.tags[k].mime)) break
def convert_image(self, audiofile): path, ext = splitfilename(audiofile.filename) if audiofile.tags: for k in audiofile.tags: if k == "APIC:thumbnail": with open("{}.thumb2".format(path), "wb") as fout: fout.write(audiofile.tags[k].data) pic = Image.open(path + ".thumb2") width = pic.size[0] height = pic.size[1] if width > height: newwidth = 320 newheight = height * newwidth / width else: newheight = 320 newwidth = width * newheight / height pic = pic.resize((newwidth, newheight), Image.ANTIALIAS) pic.save(path + ".thumb2", "jpeg") self.files.append(File(path + ".thumb2", "presentation", audiofile.tags[k].mime)) break
def makeThumbNail(self, audiofile): path, ext = splitfilename(audiofile.filename) if audiofile.tags: for k in audiofile.tags: if k == "APIC:thumbnail": fout = open(path + ".thumb", "wb") fout.write(audiofile.tags[k].data) fout.close() pic = Image.open(path + ".thumb2") width = pic.size[0] height = pic.size[1] if width > height: newwidth = 128 newheight = height * newwidth / width else: newheight = 128 newwidth = width * newheight / height pic = pic.resize((newwidth, newheight), Image.ANTIALIAS) pic.save(path + ".thumb", "jpeg") pic = pic.resize((newwidth, newheight), Image.ANTIALIAS) im = Image.new(pic.mode, (128, 128), (255, 255, 255)) x = (128 - newwidth) / 2 y = (128 - newheight) / 2 im.paste(pic, (x, y, x + newwidth, y + newheight)) draw = ImageDraw.ImageDraw(im) draw.line([(0, 0), (127, 0), (127, 127), (0, 127), (0, 0)], (128, 128, 128)) im = im.convert("RGB") im.save(path + ".thumb", "jpeg") self.addFile(FileNode(name=path + ".thumb", type="thumb", mimetype=audiofile.tags[k].mime)) break
def makePresentationFormat(self, audiofile): path, ext = splitfilename(audiofile.filename) if audiofile.tags: for k in audiofile.tags: if k == "APIC:thumbnail": fout = open(path + ".thumb2", "wb") fout.write(audiofile.tags[k].data) fout.close() pic = Image.open(path + ".thumb2") width = pic.size[0] height = pic.size[1] if width > height: newwidth = 320 newheight = height * newwidth / width else: newheight = 320 newwidth = width * newheight / height pic = pic.resize((newwidth, newheight), Image.ANTIALIAS) pic.save(path + ".thumb2", "jpeg") self.addFile(FileNode(name=path + ".thumb2", type="presentation", mimetype=audiofile.tags[k].mime)) break
def make_thumbnail_image(self, audiofile): path, ext = splitfilename(audiofile.filename) if audiofile.tags: for k in audiofile.tags: if k == "APIC:thumbnail": with open("{}.thumb".format(path), "wb") as fout: fout.write(audiofile.tags[k].data) pic = Image.open(path + ".thumb2") width = pic.size[0] height = pic.size[1] if width > height: newwidth = 128 newheight = height * newwidth / width else: newheight = 128 newwidth = width * newheight / height pic = pic.resize((newwidth, newheight), Image.ANTIALIAS) pic.save(path + ".thumb", "jpeg") pic = pic.resize((newwidth, newheight), Image.ANTIALIAS) im = Image.new(pic.mode, (128, 128), (255, 255, 255)) x = (128 - newwidth) / 2 y = (128 - newheight) / 2 im.paste(pic, (x, y, x + newwidth, y + newheight)) draw = ImageDraw.ImageDraw(im) draw.line([(0, 0), (127, 0), (127, 127), (0, 127), (0, 0)], (128, 128, 128)) im = im.convert("RGB") im.save(path + ".thumb", "jpeg") self.files.append(File(path + ".thumb", "thumb", audiofile.tags[k].mime)) break
def event_files_changed(self): logg.debug("Postprocessing node %s", self.id) thumb = 0 fulltext = 0 doc = None present = 0 fileinfo = 0 for f in self.files: if f.type == "thumb": thumb = 1 elif f.type.startswith("present"): present = 1 elif f.type == "fulltext": fulltext = 1 elif f.type == "fileinfo": fileinfo = 1 elif f.type == "document": doc = f if not doc: for f in self.files: if f.type == "thumb": self.files.remove(f) elif f.type.startswith("present"): self.files.remove(f) elif f.type == "fileinfo": self.files.remove(f) elif f.type == "fulltext": self.files.remove(f) #fetch unwanted tags to be omitted unwanted_attrs = self.get_unwanted_exif_attributes() if doc: path, ext = splitfilename(doc.abspath) if not (thumb and present and fulltext and fileinfo): thumbname = path + ".thumb" thumb2name = path + ".thumb2" fulltextname = path + ".txt" infoname = path + ".info" tempdir = config.get("paths.tempdir") try: pdfdata = parsepdf.parsePDFExternal(doc.abspath, tempdir) except parsepdf.PDFException as ex: if ex.value == 'error:document encrypted': # allow upload of encrypted document db.session.commit() return raise OperationException(ex.value) with codecs.open(infoname, "rb", encoding='utf8') as fi: for line in fi.readlines(): i = line.find(':') if i > 0: if any(tag in line[0:i].strip().lower() for tag in unwanted_attrs): continue self.set("pdf_" + line[0:i].strip().lower(), utf8_decode_escape(line[i + 1:].strip())) self.files.append(File(thumbname, "thumb", "image/jpeg")) self.files.append(File(thumb2name, "presentation", "image/jpeg")) self.files.append(File(fulltextname, "fulltext", "text/plain")) self.files.append(File(infoname, "fileinfo", "text/plain")) if doc: import_node_fulltext(self, overwrite=True) db.session.commit()
def event_files_changed(self): print "Postprocessing node", self.id if "image" in self.type: for f in self.getFiles(): if f.getName().lower().endswith('svg'): self.svg_to_png(f.retrieveFile(), f.retrieveFile()[:-4] + ".png") self.removeFile(f) self.addFile(FileNode(name=f.retrieveFile(), type="original", mimetype=f.mimetype)) self.addFile(FileNode(name=f.retrieveFile(), type="image", mimetype=f.mimetype)) self.addFile(FileNode(name=f.retrieveFile()[:-4] + ".png", type="tmppng", mimetype="image/png")) break orig = 0 thumb = 0 for f in self.getFiles(): if f.type == "original": orig = 1 if f.type == "thumb": thumb = 1 if orig == 0: for f in self.getFiles(): if f.type == "image": if f.mimetype == "image/tiff" or ((f.mimetype is None or f.mimetype == "application/x-download") and (f.getName().lower().endswith("tif") or f.getName().lower().endswith("tiff"))): # move old file to "original", create a new png to be used as "image" self.removeFile(f) path, ext = splitfilename(f.retrieveFile()) pngname = path + ".png" if not os.path.isfile(pngname): makeOriginalFormat(f.retrieveFile(), pngname) width, height = getImageDimensions(pngname) self.set("width", width) self.set("height", height) else: width, height = getImageDimensions(pngname) self.set("width", width) self.set("height", height) print 'png name/path: ', pngname self.addFile(FileNode(name=pngname, type="image", mimetype="image/png")) self.addFile(FileNode(name=f.retrieveFile(), type="original", mimetype="image/tiff")) break else: self.addFile(FileNode(name=f.retrieveFile(), type="original", mimetype=f.mimetype)) # retrieve technical metadata. for f in self.getFiles(): if (f.type == "image" and not f.getName().lower().endswith("svg")) or f.type == "tmppng": width, height = getImageDimensions(f.retrieveFile()) self.set("origwidth", width) self.set("origheight", height) self.set("origsize", f.getSize()) if f.mimetype == "image/jpeg": self.set("jpg_comment", iso2utf8(getJpegSection(f.retrieveFile(), 0xFE).strip())) if thumb == 0: for f in self.getFiles(): if (f.type == "image" and not f.getName().lower().endswith("svg")) or f.type == "tmppng": path, ext = splitfilename(f.retrieveFile()) basename = hashlib.md5(str(random.random())).hexdigest()[0:8] # path = os.path.join(getImportDir(),os.path.basename(path)) path = os.path.join(getImportDir(), basename) thumbname = path + ".thumb" thumbname2 = path + ".thumb2" print 'tumb: ', thumbname print 'presentation: ', thumbname2 assert not os.path.isfile(thumbname) assert not os.path.isfile(thumbname2) width, height = getImageDimensions(f.retrieveFile()) makeThumbNail(f.retrieveFile(), thumbname) makePresentationFormat(f.retrieveFile(), thumbname2) if f.mimetype is None: if f.getName().lower().endswith("jpg"): f.mimetype = "image/jpeg" else: f.mimetype = "image/tiff" self.addFile(FileNode(name=thumbname, type="thumb", mimetype="image/jpeg")) self.addFile(FileNode(name=thumbname2, type="presentation", mimetype="image/jpeg")) self.set("width", width) self.set("height", height) #fetch unwanted tags to be omitted unwanted_attrs = self.unwanted_attributes() # Exif try: from lib.Exif import EXIF files = self.getFiles() for file in files: if file.type == "original": f = open(file.retrieveFile(), 'rb') tags = EXIF.process_file(f) tags.keys().sort() for k in tags.keys(): # don't set unwanted exif attributes if any(tag in k for tag in unwanted_attrs): continue if tags[k] != "" and k != "JPEGThumbnail": self.set("exif_" + k.replace(" ", "_"), utf8_decode_escape(str(tags[k]))) elif k == "JPEGThumbnail": if tags[k] != "": self.set("Thumbnail", "True") else: self.set("Thumbnail", "False") except: None if dozoom(self) == 1: tileok = 0 for f in self.getFiles(): if f.type.startswith("tile"): tileok = 1 if not tileok and self.get("width") and self.get("height"): zoom.getImage(self.id, 1) # iptc try: from lib.iptc import IPTC files = self.getFiles() for file in files: if file.type == "original": tags = IPTC.getIPTCValues(file.retrieveFile()) tags.keys().sort() for k in tags.keys(): # skip unknown iptc tags if 'IPTC_' in k: continue if any(tag in k for tag in unwanted_attrs): continue if isinstance(tags[k], list): tags[k] = ', '.join(tags[k]) if tags[k] != "": self.set("iptc_" + k.replace(" ", "_"), utf8_decode_escape(str(tags[k]))) except: None for f in self.getFiles(): if f.getName().lower().endswith("png") and f.type == "tmppng": self.removeFile(f) break
def event_files_changed(self): print "Postprocessing node", self.id if "image" in self.type: for f in self.getFiles(): if f.getName().lower().endswith('svg'): self.svg_to_png(f.retrieveFile(), f.retrieveFile()[:-4] + ".png") self.removeFile(f) self.addFile( FileNode(name=f.retrieveFile(), type="original", mimetype=f.mimetype)) self.addFile( FileNode(name=f.retrieveFile(), type="image", mimetype=f.mimetype)) self.addFile( FileNode(name=f.retrieveFile()[:-4] + ".png", type="tmppng", mimetype="image/png")) break orig = 0 thumb = 0 for f in self.getFiles(): if f.type == "original": orig = 1 if f.type == "thumb": thumb = 1 if orig == 0: for f in self.getFiles(): if f.type == "image": if f.mimetype == "image/tiff" or ( (f.mimetype is None or f.mimetype == "application/x-download") and (f.getName().lower().endswith("tif") or f.getName().lower().endswith("tiff"))): # move old file to "original", create a new png to be used as "image" self.removeFile(f) path, ext = splitfilename(f.retrieveFile()) pngname = path + ".png" if not os.path.isfile(pngname): makeOriginalFormat(f.retrieveFile(), pngname) width, height = getImageDimensions(pngname) self.set("width", width) self.set("height", height) else: width, height = getImageDimensions(pngname) self.set("width", width) self.set("height", height) self.addFile( FileNode(name=pngname, type="image", mimetype="image/png")) self.addFile( FileNode(name=f.retrieveFile(), type="original", mimetype="image/tiff")) break else: self.addFile( FileNode(name=f.retrieveFile(), type="original", mimetype=f.mimetype)) # retrieve technical metadata. for f in self.getFiles(): if (f.type == "image" and not f.getName().lower().endswith("svg") ) or f.type == "tmppng": width, height = getImageDimensions(f.retrieveFile()) self.set("origwidth", width) self.set("origheight", height) self.set("origsize", f.getSize()) if f.mimetype == "image/jpeg": self.set( "jpg_comment", iso2utf8( getJpegSection(f.retrieveFile(), 0xFE).strip())) if thumb == 0: for f in self.getFiles(): if (f.type == "image" and not f.getName().lower().endswith("svg") ) or f.type == "tmppng": path, ext = splitfilename(f.retrieveFile()) basename = hashlib.md5(str( random.random())).hexdigest()[0:8] #path = os.path.join(getImportDir(),os.path.basename(path)) path = os.path.join(getImportDir(), basename) thumbname = path + ".thumb" thumbname2 = path + ".thumb2" assert not os.path.isfile(thumbname) assert not os.path.isfile(thumbname2) width, height = getImageDimensions(f.retrieveFile()) makeThumbNail(f.retrieveFile(), thumbname) makePresentationFormat(f.retrieveFile(), thumbname2) if f.mimetype is None: if f.getName().lower().endswith("jpg"): f.mimetype = "image/jpeg" else: f.mimetype = "image/tiff" self.addFile( FileNode(name=thumbname, type="thumb", mimetype="image/jpeg")) self.addFile( FileNode(name=thumbname2, type="presentation", mimetype="image/jpeg")) self.set("width", width) self.set("height", height) #fetch unwanted tags to be omitted unwanted_attrs = self.unwanted_attributes() # Exif try: from lib.Exif import EXIF files = self.getFiles() for file in files: if file.type == "original": f = open(file.retrieveFile(), 'rb') tags = EXIF.process_file(f) tags.keys().sort() for k in tags.keys(): # don't set unwanted exif attributes if any(tag in k for tag in unwanted_attrs): continue if tags[k] != "" and k != "JPEGThumbnail": self.set("exif_" + k.replace(" ", "_"), utf8_decode_escape(str(tags[k]))) elif k == "JPEGThumbnail": if tags[k] != "": self.set("Thumbnail", "True") else: self.set("Thumbnail", "False") except: None if dozoom(self) == 1: tileok = 0 for f in self.getFiles(): if f.type.startswith("tile"): tileok = 1 if not tileok and self.get("width") and self.get("height"): zoom.getImage(self.id, 1) # iptc try: from lib.iptc import IPTC files = self.getFiles() for file in files: if file.type == "original": tags = IPTC.getIPTCValues(file.retrieveFile()) tags.keys().sort() for k in tags.keys(): # skip unknown iptc tags if 'IPTC_' in k: continue if any(tag in k for tag in unwanted_attrs): continue if isinstance(tags[k], list): tags[k] = ', '.join(tags[k]) if tags[k] != "": self.set("iptc_" + k.replace(" ", "_"), utf8_decode_escape(str(tags[k]))) except: None for f in self.getFiles(): if f.getName().lower().endswith("png") and f.type == "tmppng": self.removeFile(f) break
def event_files_changed(self): logg.debug("Postprocessing node %s", self.id) thumb = 0 fulltext = 0 doc = None present = 0 fileinfo = 0 for f in self.files: if f.type == "thumb": thumb = 1 elif f.type.startswith("present"): present = 1 elif f.type == "fulltext": fulltext = 1 elif f.type == "fileinfo": fileinfo = 1 elif f.type == "document": doc = f if not doc: for f in self.files: if f.type == "thumb": self.files.remove(f) elif f.type.startswith("present"): self.files.remove(f) elif f.type == "fileinfo": self.files.remove(f) elif f.type == "fulltext": self.files.remove(f) #fetch unwanted tags to be omitted unwanted_attrs = self.get_unwanted_exif_attributes() if doc: path, ext = splitfilename(doc.abspath) if not (thumb and present and fulltext and fileinfo): thumbname = path + ".thumb" thumb2name = path + ".thumb2" fulltextname = path + ".txt" infoname = path + ".info" tempdir = config.get("paths.tempdir") try: pdfdata = parsepdf.parsePDFExternal(doc.abspath, tempdir) except parsepdf.PDFException as ex: if ex.value == 'error:document encrypted': # allow upload of encrypted document db.session.commit() return raise OperationException(ex.value) with codecs.open(infoname, "rb", encoding='utf8') as fi: for line in fi.readlines(): i = line.find(':') if i > 0: if any(tag in line[0:i].strip().lower() for tag in unwanted_attrs): continue self.set("pdf_" + line[0:i].strip().lower(), utf8_decode_escape(line[i + 1:].strip())) self.files.append(File(thumbname, "thumb", "image/jpeg")) self.files.append( File(thumb2name, "presentation", "image/jpeg")) self.files.append(File(fulltextname, "fulltext", "text/plain")) self.files.append(File(infoname, "fileinfo", "text/plain")) if doc: import_node_fulltext(self, overwrite=True) db.session.commit()
def event_files_changed(self): print "Postprocessing node", self.id thumb = 0 fulltext = 0 doc = None present = 0 fileinfo = 0 for f in self.getFiles(): if f.type == "thumb": thumb = 1 elif f.type.startswith("present"): present = 1 elif f.type == "fulltext": fulltext = 1 elif f.type == "fileinfo": fileinfo = 1 elif f.type == "doc": doc = f elif f.type == "document": doc = f if not doc: for f in self.getFiles(): if f.type == "thumb": self.removeFile(f) elif f.type.startswith("present"): self.removeFile(f) elif f.type == "fileinfo": self.removeFile(f) elif f.type == "fulltext": self.removeFile(f) #fetch unwated tags to be omitted unwanted_attrs = self.unwanted_attributes() if doc: path, ext = splitfilename(doc.retrieveFile()) if not (thumb and present and fulltext and fileinfo): thumbname = path + ".thumb" thumb2name = path + ".thumb2" fulltextname = path + ".txt" infoname = path + ".info" tempdir = config.get("paths.tempdir") try: pdfdata = parsepdf.parsePDF2(doc.retrieveFile(), tempdir) except parsepdf.PDFException as ex: raise OperationException(ex.value) fi = open(infoname, "rb") for line in fi.readlines(): i = line.find(':') if i > 0: if any(tag in line[0:i].strip().lower() for tag in unwanted_attrs): continue self.set("pdf_" + line[0:i].strip().lower(), utf8_decode_escape(line[i + 1:].strip())) fi.close() self.addFile(FileNode(name=thumbname, type="thumb", mimetype="image/jpeg")) self.addFile(FileNode(name=thumb2name, type="presentation", mimetype="image/jpeg")) self.addFile(FileNode(name=fulltextname, type="fulltext", mimetype="text/plain")) self.addFile(FileNode(name=infoname, type="fileinfo", mimetype="text/plain"))
def event_files_changed(self): for f in self.getFiles(): if f.type in ["thumb", "presentation"]: self.removeFile(f) nodefiles = self.getFiles() if len(nodefiles) == 1 and nodefiles[0].mimetype == "video/quicktime": if nodefiles[0].retrieveFile().endswith( '.mov'): # handle mov -> flv flvname = "%sflv" % nodefiles[0].retrieveFile()[:-3] ret = os.system( "ffmpeg -loglevel quiet -i %s -ar 44100 -ab 128 -f flv %s" % (nodefiles[0].retrieveFile(), flvname)) if ret & 0xff00: return self.addFile( FileNode(name=flvname, type="video", mimetype="video/x-flv")) #fetch tags to be omitted unwanted_attrs = self.unwanted_attributes() for f in self.getFiles(): if f.type in ["original", "video"]: if f.mimetype == "video/x-flv": meta = FLVReader(f.retrieveFile()) for key in meta: if any(tag in key for tag in unwanted_attrs): continue try: self.set(key, int(meta[key])) except: self.set(key, meta[key]) self.set("vid-width", self.get("width")) self.set("vid-height", self.get("height")) tempname = os.path.join(config.get("paths.tempdir"), "tmp.gif") try: os.unlink(tempname) except: pass try: if self.get("system.thumbframe") != "": cmd = "ffmpeg -loglevel quiet -ss %s -i %s -vframes 1 -pix_fmt rgb24 %s" % ( self.get("system.thumbframe"), f.retrieveFile(), tempname) else: cmd = "ffmpeg -loglevel quiet -i %s -vframes 1 -pix_fmt rgb24 %s" % ( f.retrieveFile(), tempname) ret = os.system(cmd) if ret & 0xff00: return except: return path, ext = splitfilename(f.retrieveFile()) thumbname = path + ".thumb" thumbname2 = path + ".thumb2" makeThumbNail(tempname, thumbname) makePresentationFormat(tempname, thumbname2) self.addFile( FileNode(name=thumbname, type="thumb", mimetype="image/jpeg")) self.addFile( FileNode(name=thumbname2, type="presentation", mimetype="image/jpeg"))
def event_files_changed(self): print "Postprocessing node", self.id if "image" in self.type: for f in self.getFiles(): if f.getName().lower().endswith('svg'): self.svg_to_png(f.retrieveFile(), f.retrieveFile()[:-4] + ".png") self.removeFile(f) self.addFile(FileNode(name=f.retrieveFile(), type="original", mimetype=f.mimetype)) self.addFile(FileNode(name=f.retrieveFile(), type="image", mimetype=f.mimetype)) self.addFile(FileNode(name=f.retrieveFile()[:-4] + ".png", type="tmppng", mimetype="image/png")) break orig = 0 thumb = 0 for f in self.getFiles(): if f.type == "original": orig = 1 if f.type == "thumb": thumb = 1 if orig == 0: for f in self.getFiles(): if f.type == "image": if f.mimetype == "image/tiff" or ((f.mimetype is None or f.mimetype == "application/x-download") and (f.getName().lower().endswith("tif") or f.getName().lower().endswith("tiff"))): # move old file to "original", create a new png to be used as "image" self.removeFile(f) path, ext = splitfilename(f.retrieveFile()) pngname = path + ".png" if not os.path.isfile(pngname): makeOriginalFormat(f.retrieveFile(), pngname) width, height = getImageDimensions(pngname) self.set("width", width) self.set("height", height) else: width, height = getImageDimensions(pngname) self.set("width", width) self.set("height", height) print 'png: ', pngname self.addFile(FileNode(name=pngname, type="image", mimetype="image/png")) self.addFile(FileNode(name=f.retrieveFile(), type="original", mimetype="image/tiff")) break else: self.addFile(FileNode(name=f.retrieveFile(), type="original", mimetype=f.mimetype)) # retrieve technical metadata. for f in self.getFiles(): if (f.type == "image" and not f.getName().lower().endswith("svg")) or f.type == "tmppng": width, height = getImageDimensions(f.retrieveFile()) self.set("origwidth", width) self.set("origheight", height) self.set("origsize", f.getSize()) if f.mimetype == "image/jpeg": self.set("jpg_comment", iso2utf8(getJpegSection(f.retrieveFile(), 0xFE).strip())) if thumb == 0: for f in self.getFiles(): if (f.type == "image" and not f.getName().lower().endswith("svg")) or f.type == "tmppng": basename = hashlib.md5(str(random.random())).hexdigest()[0:8] path = os.path.join(getImportDir(), basename) thumbname = path + ".thumb" thumbname2 = path + ".thumb2" print 'tumb: ', thumbname print 'presentation: ', thumbname2 assert not os.path.isfile(thumbname) assert not os.path.isfile(thumbname2) width, height = getImageDimensions(f.retrieveFile()) makeThumbNail(f.retrieveFile(), thumbname) makePresentationFormat(f.retrieveFile(), thumbname2) if f.mimetype is None: if f.getName().lower().endswith("jpg"): f.mimetype = "image/jpeg" else: f.mimetype = "image/tiff" self.addFile(FileNode(name=thumbname, type="thumb", mimetype="image/jpeg")) self.addFile(FileNode(name=thumbname2, type="presentation", mimetype="image/jpeg")) self.set("width", width) self.set("height", height) # fetch unwanted tags to be omitted unwanted_attrs = self.unwanted_attributes() # Exif try: files = self.getFiles() for file in files: if file.type == "original": f = open(file.retrieveFile(), 'rb') tags = EXIF.process_file(f) tags.keys().sort() for k in tags.keys(): # don't set unwanted exif attributes if any(tag in k for tag in unwanted_attrs): continue if tags[k] != "" and k != "JPEGThumbnail": self.set("exif_" + k.replace(" ", "_"), utf8_decode_escape(str(tags[k]))) elif k == "JPEGThumbnail": if tags[k] != "": self.set("Thumbnail", "True") else: self.set("Thumbnail", "False") except: None if dozoom(self) == 1: tileok = 0 for f in self.getFiles(): if f.type.startswith("tile"): tileok = 1 if not tileok and self.get("width") and self.get("height"): zoom.getImage(self.id, 1) for f in self.getFiles(): if f.getType() == 'original': wanted_tags = lib.iptc.IPTC.get_wanted_iptc_tags() tags_in_upload = lib.iptc.IPTC.get_iptc_values(f.retrieveFile(), wanted_tags) with_value = [] for field in getMetaType(self.getSchema()).getMetaFields(): if field.get('type') == "meta" and len(field.getValueList()) > 1: value = self.get('iptc_{}'.format(field.getName())) if len(value) > 0: with_value.append(field.getName()) if tags_in_upload: for key in tags_in_upload.keys(): if tags_in_upload[key] != '': if key not in with_value: self.set('iptc_{}'.format(key.replace(' ', '_')), tags_in_upload[key]) for f in self.getFiles(): if f.getName().lower().endswith("png") and f.type == "tmppng": self.removeFile(f) break
def event_files_changed(self): print "Postprocessing node", self.id thumb = 0 fulltext = 0 doc = None present = 0 fileinfo = 0 for f in self.getFiles(): if f.type == "thumb": thumb = 1 elif f.type.startswith("present"): present = 1 elif f.type == "fulltext": fulltext = 1 elif f.type == "fileinfo": fileinfo = 1 elif f.type == "doc": doc = f elif f.type == "document": doc = f if not doc: for f in self.getFiles(): if f.type == "thumb": self.removeFile(f) elif f.type.startswith("present"): self.removeFile(f) elif f.type == "fileinfo": self.removeFile(f) elif f.type == "fulltext": self.removeFile(f) #fetch unwated tags to be omitted unwanted_attrs = self.unwanted_attributes() if doc: path, ext = splitfilename(doc.retrieveFile()) if not (thumb and present and fulltext and fileinfo): thumbname = path + ".thumb" thumb2name = path + ".thumb2" fulltextname = path + ".txt" infoname = path + ".info" tempdir = config.get("paths.tempdir") try: pdfdata = parsepdf.parsePDF2(doc.retrieveFile(), tempdir) except parsepdf.PDFException as ex: raise OperationException(ex.value) fi = open(infoname, "rb") for line in fi.readlines(): i = line.find(':') if i > 0: if any(tag in line[0:i].strip().lower() for tag in unwanted_attrs): continue self.set("pdf_" + line[0:i].strip().lower(), utf8_decode_escape(line[i + 1:].strip())) fi.close() self.addFile( FileNode(name=thumbname, type="thumb", mimetype="image/jpeg")) self.addFile( FileNode(name=thumb2name, type="presentation", mimetype="image/jpeg")) self.addFile( FileNode(name=fulltextname, type="fulltext", mimetype="text/plain")) self.addFile( FileNode(name=infoname, type="fileinfo", mimetype="text/plain"))