summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app-misc/xmind/files/xmind-thumbnailer')
-rw-r--r--app-misc/xmind/files/xmind-thumbnailer78
1 files changed, 78 insertions, 0 deletions
diff --git a/app-misc/xmind/files/xmind-thumbnailer b/app-misc/xmind/files/xmind-thumbnailer
new file mode 100644
index 000000000000..48eb89b8cd9a
--- /dev/null
+++ b/app-misc/xmind/files/xmind-thumbnailer
@@ -0,0 +1,78 @@
+#!/usr/bin/env python
+
+import gnomevfs
+import os
+import sys
+import zipfile
+from PIL import Image, ImageEnhance
+
+# Alter these varibles to change thumbnail look
+ICON_PATH = "/usr/share/icons/hicolor/32x32/apps/xmind.png" # Change this path to alter icons
+ICON_OPACITY = 0.6 #Opacity of the icon (between 0.0 and 1.0)
+THUMBNAIL_BACKGROUND_COLOR = "white" # Color of the background
+
+in_file_path = gnomevfs.get_local_path_from_uri(sys.argv[1])
+out_file_path = sys.argv[2]
+path_without_thumbs = os.getenv("HOME")+"/Templates"
+
+def get_icon(thumbnail_size):
+ #Load icon
+ icon = Image.open(ICON_PATH).convert("RGBA")
+ #Set it's opacity
+ icon = set_icon_opacity(icon,ICON_OPACITY)
+ #And set it's position in thumbnail
+ icon_posx=thumbnail_size[0]-icon.size[0]
+ icon_posy=thumbnail_size[1]-icon.size[1]
+ icon_width=thumbnail_size[0]
+ icon_height=thumbnail_size[1]
+ return {"image":icon,"position":(icon_posx,icon_posy,icon_width,icon_height)}
+
+def get_basic_thumbnail():
+ #Find out if the file is not in Templates directory
+ if in_file_path.find(path_without_thumbs)!=0:
+ try:
+ #Extract thumbnail from Xmind file and save it
+ zip=zipfile.ZipFile(in_file_path,mode="r")
+ picture=zip.read("Thumbnails/thumbnail.jpg")
+ zip.close()
+ thumbnail=open(out_file_path,"w")
+ thumbnail.write(picture)
+ thumbnail.write("/n")
+ thumbnail.close()
+ #Open saved thumbnail
+ image=Image.open(out_file_path).convert("RGBA")
+ if image.size[0]>200:
+ image = image.resize((200,image.size[1]*200/image.size[0]))
+ if image.size[1]>200:
+ image = image.resize((image.size[0]*200/image.size[1],200))
+ return {"suceeded":True,"image":image,"size":(image.size[0],image.size[1])}
+
+ except:
+ return {"suceeded":False}
+ else:
+ return {"suceeded":False}
+
+# Nicked from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/362879
+def set_icon_opacity(icon,opacity):
+ #Returns an image with reduced opacity.
+ assert opacity >= 0 and opacity <= 1
+ if icon.mode != 'RGBA':
+ icon = icon.convert('RGBA')
+ else:
+ icon = icon.copy()
+ alpha = icon.split()[3]
+ alpha = ImageEnhance.Brightness(alpha).enhance(opacity)
+ icon.putalpha(alpha)
+ return icon
+
+thumbnail=get_basic_thumbnail()
+if thumbnail["suceeded"]:
+ background=Image.new("RGB", thumbnail["size"], THUMBNAIL_BACKGROUND_COLOR)
+ icon=get_icon(thumbnail["size"])
+ thumbnail=thumbnail["image"]
+ # Add thumbnail
+ background.paste(thumbnail, None, thumbnail)
+ # Add icon
+ background.paste(icon["image"],icon["position"],icon["image"])
+ # Save thumbnail
+ background.save(out_file_path,"PNG")