import logging from pelican import signals from pelican.generators import ArticlesGenerator from pelican.generators import PagesGenerator from pathlib import Path logger = logging.getLogger(__name__) IMAGE_PATH = './content/' IMAGE_SIZES = [200, 375, 480, 800, 1600] def process_content(article): """ Substitute the citations and add a bibliography for an article or page, using the local bib file if specified or the global one otherwise. """ content = article._content logger.info("start\n\n") content = "" + content i = content.count("[lightgallery") if (i <= 0): pass j = content.count("lightgalleryend]") if (j != i): pass m = find_between(content, '[lightgallery', 'lightgalleryend]') imgs = m.split(';') logger.info("" + article.title + "\n") imgs_text = "" for i in imgs: cont = i.split(',') img_url = cont[0].strip() if img_url == "": continue img_text = "" if (len(cont) > 1): img_text = "

" + cont[1] + "

" logger.info("t\'" + img_url + "\'a\'" + img_text + "\'\n") zoom_url = "/theme/images/zoom.png" imgs_text += "
  • " imgs_text += "" imgs_text += " " imgs_text += " " imgs_text += "" imgs_text += "
  • \n" replace_text = "
    " replace_text += " " replace_text += "
    " logger.info("" + replace_text + "\n") content = content.replace('[lightgallery' + m + 'lightgalleryend]', replace_text) article._content = content logger.info("end\n\n") pass def replace_right(source, target, replacement, replacements=None): return replacement.join(source.rsplit(target, replacements)) def find_between(s, first, last): try: start = s.rindex(first) + len(first) end = s.rindex(last, start) return s[start:end] except ValueError: return "" def add_gallery(generators): logger.info("add_gallery\n\n") # Process the articles and pages for generator in generators: if isinstance(generator, ArticlesGenerator): for article in (generator.articles + generator.translations + generator.drafts): process_content(article) elif isinstance(generator, PagesGenerator): for page in generator.pages: process_content(page) pass def create_scaled_image(org_path, new_path, resize_width): import PIL.Image from resizeimage import resizeimage import os logger.info("gen " + new_path + "from " + org_path + " size " + str(resize_width) + "\n") exists = os.path.isfile(new_path) if exists: logger.info("skip nothing to do\n") return "" dir_path = str(Path(new_path).parent) exists = os.path.isdir(dir_path) if not exists: logger.info("create dir " + dir_path) os.mkdir(dir_path) logger.info("convert \n") img = PIL.Image.open(org_path) width, height = img.size logger.info("" + str(width) + "\n") if (width > resize_width): img = resizeimage.resize_width(img, resize_width) img.save(new_path, img.format) img.close() logger.info("done \n") def create_exif_print(img_path): try: import PIL.Image import os exists = os.path.isfile(img_path) if not exists: return "" img = PIL.Image.open(img_path) exif = img._getexif() img.close() logger.info("######### exif " + img_path + "\n") if exif is None: return "" programm_dic = {0: "N", # "Not defined", 1: "M", # "Manual", 2: "N", # "Normal program", 3: "A", # "Aperture priority", 4: "S", # "Shutter priority", 5: "C", # "Creative program", 6: "A", # "Action program", 7: "P", # "Portrait mode", 8: "L", # "Landscape mode", } ret = "" if 272 in exif: ret += "" + exif[272] if 42036 in exif: ret += " with " + exif[42036] ret += "
    " if 37386 in exif: ret += "at" + str(exif[37386][0] / exif[37386][1]) + "mm " if 37378 in exif: ret += "f" + str(exif[37378][0] / exif[37378][1]) + " " if 34855 in exif: ret += " iso" + str(exif[34855]) + " " if 33434 in exif: ret += " " + str(exif[33434][0]) if exif[33434][1] != 1: ret += "/" + str(exif[33434][1]) ret += "sec " if 34850 in exif: ret += " " + programm_dic[exif[34850]] + "" if 315 in exif: ret += " " + exif[315] if 33432 in exif: ret += " (c) " + exif[33432] return ret except ValueError: return "" def register(): signals.all_generators_finalized.connect(add_gallery)