{"id":1079,"date":"2013-08-14T13:45:31","date_gmt":"2013-08-14T12:45:31","guid":{"rendered":"http:\/\/www.phillips321.co.uk\/?p=1079"},"modified":"2015-05-05T12:37:18","modified_gmt":"2015-05-05T11:37:18","slug":"synothumb-py-only-does-pics-but-is-for-os-x","status":"publish","type":"post","link":"https:\/\/www.phillips321.co.uk\/2013\/08\/14\/synothumb-py-only-does-pics-but-is-for-os-x\/","title":{"rendered":"synothumb.py &#8211; Pyhton so suports most Operating Systems"},"content":{"rendered":"<p>So I created <a href=\"http:\/\/www.phillips321.co.uk\/2012\/04\/08\/creating-thumbnails-for-the-synology-diskstation-photostation\/\" title=\"Creating Thumbnails for the Synology DiskStation PhotoStation\" target=\"_blank\">synothumb.sh a while ago<\/a> to quickly create thumbnails for my Synology DS211j NAS box. Unfortunately many people wanted something that would run easily on a mac so i have just rewritten this to run using python and the PIL module (<a href=\"http:\/\/blog.artooro.com\/2013\/01\/04\/how-to-install-pil-python-imaging-library-on-mac-os-x-10-8\/\" target=\"_blank\">how to install PIL<\/a>).<\/p>\n<p>You&#8217;ll need to mount the remote drive via <a href=\"http:\/\/www.greci.cc\/?p=225\" target=\"_blank\">nfs(network file share)<\/a> and not afp(apple file protocol)<\/p>\n<p>Here&#8217;s the code. I strongly suggest reading through it and maybe making changes to suit your own needs. <a href=\"https:\/\/github.com\/phillips321\/synothumbs\" target=\"_blank\">Link to Code (https:\/\/github.com\/phillips321\/synothumbs &#8211; dont copy\/paste due to indents)<\/a><\/p>\n<div class=\"codecolorer-container python vibrant\" style=\"overflow:auto;white-space:nowrap;width:100%;height:300px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/>2<br \/>3<br \/>4<br \/>5<br \/>6<br \/>7<br \/>8<br \/>9<br \/>10<br \/>11<br \/>12<br \/>13<br \/>14<br \/>15<br \/>16<br \/>17<br \/>18<br \/>19<br \/>20<br \/>21<br \/>22<br \/>23<br \/>24<br \/>25<br \/>26<br \/>27<br \/>28<br \/>29<br \/>30<br \/>31<br \/>32<br \/>33<br \/>34<br \/>35<br \/>36<br \/>37<br \/>38<br \/>39<br \/>40<br \/>41<br \/>42<br \/>43<br \/>44<br \/>45<br \/>46<br \/><\/div><\/td><td><div class=\"python codecolorer\"><span class=\"co1\">#!\/usr\/bin\/env python<\/span><br \/>\n<span class=\"co1\"># sudo mount_nfs -P 192.168.0.2:\/volume1\/photo \/Users\/phillips321\/nfsmount<\/span><br \/>\n<span class=\"kw1\">import<\/span> <span class=\"kw3\">os<\/span><span class=\"sy0\">,<\/span><span class=\"kw3\">sys<\/span><span class=\"sy0\">,<\/span>Image<br \/>\n<span class=\"kw1\">try<\/span>:<br \/>\n&nbsp; &nbsp; rootdir<span class=\"sy0\">=<\/span><span class=\"kw3\">sys<\/span>.<span class=\"me1\">argv<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span><br \/>\n<span class=\"kw1\">except<\/span>:<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">print<\/span> <span class=\"st0\">&quot;Usage: %s directory&quot;<\/span> % <span class=\"kw3\">sys<\/span>.<span class=\"me1\">argv<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#93;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw3\">sys<\/span>.<span class=\"me1\">exit<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">0<\/span><span class=\"br0\">&#41;<\/span><br \/>\nimageList<span class=\"sy0\">=<\/span><span class=\"br0\">&#91;<\/span><span class=\"br0\">&#93;<\/span><br \/>\n<br \/>\n<span class=\"co1\"># Finds all images of type jpg,png,jpeg,tif,bmp<\/span><br \/>\n<span class=\"kw1\">for<\/span> path<span class=\"sy0\">,<\/span> subFolders<span class=\"sy0\">,<\/span> files <span class=\"kw1\">in<\/span> <span class=\"kw3\">os<\/span>.<span class=\"me1\">walk<\/span><span class=\"br0\">&#40;<\/span>rootdir<span class=\"br0\">&#41;<\/span>:<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">for<\/span> <span class=\"kw2\">file<\/span> <span class=\"kw1\">in<\/span> files:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"kw3\">os<\/span>.<span class=\"me1\">path<\/span>.<span class=\"me1\">splitext<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw2\">file<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#91;<\/span><span class=\"nu0\">1<\/span><span class=\"br0\">&#93;<\/span>.<span class=\"me1\">lower<\/span><span class=\"br0\">&#40;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">==<\/span> <span class=\"st0\">&quot;.jpg&quot;<\/span> <span class=\"kw1\">or<\/span> <span class=\"st0\">&quot;.png&quot;<\/span> <span class=\"kw1\">or<\/span> <span class=\"st0\">&quot;.jpeg&quot;<\/span> <span class=\"kw1\">or<\/span> <span class=\"st0\">&quot;.tif&quot;<\/span> <span class=\"kw1\">or<\/span> <span class=\"st0\">&quot;.bmp&quot;<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"st0\">&quot;@eaDir&quot;<\/span> <span class=\"kw1\">not<\/span> <span class=\"kw1\">in<\/span> path:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"kw2\">file<\/span> <span class=\"sy0\">!=<\/span> <span class=\"st0\">&quot;.DS_Store&quot;<\/span>: imageList.<span class=\"me1\">append<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">os<\/span>.<span class=\"me1\">path<\/span>.<span class=\"me1\">join<\/span><span class=\"br0\">&#40;<\/span>path<span class=\"sy0\">,<\/span><span class=\"kw2\">file<\/span><span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n<br \/>\nxlName<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;SYNOPHOTO:THUMB_XL.jpg&quot;<\/span> <span class=\"sy0\">;<\/span> xlSize<span class=\"sy0\">=<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">1280<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">1280<\/span><span class=\"br0\">&#41;<\/span> <span class=\"co1\">#XtraLarge<\/span><br \/>\nlName<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;SYNOPHOTO:THUMB_L.jpg&quot;<\/span> <span class=\"sy0\">;<\/span> lSize<span class=\"sy0\">=<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">800<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">800<\/span><span class=\"br0\">&#41;<\/span> <span class=\"co1\">#Large<\/span><br \/>\nbName<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;SYNOPHOTO:THUMB_B.jpg&quot;<\/span> <span class=\"sy0\">;<\/span> bSize<span class=\"sy0\">=<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">640<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">640<\/span><span class=\"br0\">&#41;<\/span> <span class=\"co1\">#Big<\/span><br \/>\nmName<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;SYNOPHOTO:THUMB_M.jpg&quot;<\/span> <span class=\"sy0\">;<\/span> mSize<span class=\"sy0\">=<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">320<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">320<\/span><span class=\"br0\">&#41;<\/span> <span class=\"co1\">#Medium<\/span><br \/>\nsName<span class=\"sy0\">=<\/span><span class=\"st0\">&quot;SYNOPHOTO:THUMB_S.jpg&quot;<\/span> <span class=\"sy0\">;<\/span> sSize<span class=\"sy0\">=<\/span><span class=\"br0\">&#40;<\/span><span class=\"nu0\">160<\/span><span class=\"sy0\">,<\/span><span class=\"nu0\">160<\/span><span class=\"br0\">&#41;<\/span> <span class=\"co1\">#Small<\/span><br \/>\n<br \/>\n<span class=\"kw1\">for<\/span> imagePath <span class=\"kw1\">in<\/span> imageList:<br \/>\n&nbsp; &nbsp; imageDir<span class=\"sy0\">,<\/span>imageName <span class=\"sy0\">=<\/span> <span class=\"kw3\">os<\/span>.<span class=\"me1\">path<\/span>.<span class=\"me1\">split<\/span><span class=\"br0\">&#40;<\/span>imagePath<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; thumbDir<span class=\"sy0\">=<\/span><span class=\"kw3\">os<\/span>.<span class=\"me1\">path<\/span>.<span class=\"me1\">join<\/span><span class=\"br0\">&#40;<\/span>imageDir<span class=\"sy0\">,<\/span><span class=\"st0\">&quot;@eaDir&quot;<\/span><span class=\"sy0\">,<\/span>imageName<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"kw3\">os<\/span>.<span class=\"me1\">path<\/span>.<span class=\"me1\">isdir<\/span><span class=\"br0\">&#40;<\/span>thumbDir<span class=\"br0\">&#41;<\/span> <span class=\"sy0\">!=<\/span> <span class=\"nu0\">1<\/span>:<br \/>\n&nbsp; &nbsp; <span class=\"kw1\">try<\/span>:<span class=\"kw3\">os<\/span>.<span class=\"me1\">makedirs<\/span><span class=\"br0\">&#40;<\/span>thumbDir<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">except<\/span>:<span class=\"kw1\">continue<\/span><br \/>\n&nbsp; &nbsp; image<span class=\"sy0\">=<\/span>Image.<span class=\"kw2\">open<\/span><span class=\"br0\">&#40;<\/span>imagePath<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; <span class=\"kw1\">if<\/span> <span class=\"kw3\">os<\/span>.<span class=\"me1\">path<\/span>.<span class=\"me1\">isfile<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">os<\/span>.<span class=\"me1\">path<\/span>.<span class=\"me1\">join<\/span><span class=\"br0\">&#40;<\/span>thumbDir<span class=\"sy0\">,<\/span>xlName<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span> <span class=\"sy0\">!=<\/span> <span class=\"nu0\">1<\/span>:<br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">print<\/span> <span class=\"st0\">&quot;Now working on %s : %s&quot;<\/span> % <span class=\"br0\">&#40;<\/span>imageName<span class=\"sy0\">,<\/span>xlName<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; image.<span class=\"me1\">thumbnail<\/span><span class=\"br0\">&#40;<\/span>xlSize<span class=\"sy0\">,<\/span> Image.<span class=\"me1\">ANTIALIAS<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; image.<span class=\"me1\">save<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">os<\/span>.<span class=\"me1\">path<\/span>.<span class=\"me1\">join<\/span><span class=\"br0\">&#40;<\/span>thumbDir<span class=\"sy0\">,<\/span>xlName<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">print<\/span> <span class=\"st0\">&quot;Now working on %s : %s&quot;<\/span> % <span class=\"br0\">&#40;<\/span>imageName<span class=\"sy0\">,<\/span>lName<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; image.<span class=\"me1\">thumbnail<\/span><span class=\"br0\">&#40;<\/span>lSize<span class=\"sy0\">,<\/span> Image.<span class=\"me1\">ANTIALIAS<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; image.<span class=\"me1\">save<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">os<\/span>.<span class=\"me1\">path<\/span>.<span class=\"me1\">join<\/span><span class=\"br0\">&#40;<\/span>thumbDir<span class=\"sy0\">,<\/span>lName<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">print<\/span> <span class=\"st0\">&quot;Now working on %s : %s&quot;<\/span> % <span class=\"br0\">&#40;<\/span>imageName<span class=\"sy0\">,<\/span>bName<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; image.<span class=\"me1\">thumbnail<\/span><span class=\"br0\">&#40;<\/span>bSize<span class=\"sy0\">,<\/span> Image.<span class=\"me1\">ANTIALIAS<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; image.<span class=\"me1\">save<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">os<\/span>.<span class=\"me1\">path<\/span>.<span class=\"me1\">join<\/span><span class=\"br0\">&#40;<\/span>thumbDir<span class=\"sy0\">,<\/span>bName<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">print<\/span> <span class=\"st0\">&quot;Now working on %s : %s&quot;<\/span> % <span class=\"br0\">&#40;<\/span>imageName<span class=\"sy0\">,<\/span>mName<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; image.<span class=\"me1\">thumbnail<\/span><span class=\"br0\">&#40;<\/span>mSize<span class=\"sy0\">,<\/span> Image.<span class=\"me1\">ANTIALIAS<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; image.<span class=\"me1\">save<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">os<\/span>.<span class=\"me1\">path<\/span>.<span class=\"me1\">join<\/span><span class=\"br0\">&#40;<\/span>thumbDir<span class=\"sy0\">,<\/span>mName<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; <span class=\"kw1\">print<\/span> <span class=\"st0\">&quot;Now working on %s : %s&quot;<\/span> % <span class=\"br0\">&#40;<\/span>imageName<span class=\"sy0\">,<\/span>sName<span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; image.<span class=\"me1\">thumbnail<\/span><span class=\"br0\">&#40;<\/span>sSize<span class=\"sy0\">,<\/span> Image.<span class=\"me1\">ANTIALIAS<\/span><span class=\"br0\">&#41;<\/span><br \/>\n&nbsp; &nbsp; &nbsp; &nbsp; image.<span class=\"me1\">save<\/span><span class=\"br0\">&#40;<\/span><span class=\"kw3\">os<\/span>.<span class=\"me1\">path<\/span>.<span class=\"me1\">join<\/span><span class=\"br0\">&#40;<\/span>thumbDir<span class=\"sy0\">,<\/span>sName<span class=\"br0\">&#41;<\/span><span class=\"br0\">&#41;<\/span><\/div><\/td><\/tr><\/tbody><\/table><\/div>\n","protected":false},"excerpt":{"rendered":"<p>So I created synothumb.sh a while ago to quickly create thumbnails for my Synology DS211j NAS box. Unfortunately many people wanted something that would run easily on a mac so i have just rewritten this to run using python and the PIL module (how to install PIL). You&#8217;ll need to mount the remote drive via [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[391,392,390,111,393,209,395,394],"_links":{"self":[{"href":"https:\/\/www.phillips321.co.uk\/wp-json\/wp\/v2\/posts\/1079"}],"collection":[{"href":"https:\/\/www.phillips321.co.uk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.phillips321.co.uk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.phillips321.co.uk\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.phillips321.co.uk\/wp-json\/wp\/v2\/comments?post=1079"}],"version-history":[{"count":6,"href":"https:\/\/www.phillips321.co.uk\/wp-json\/wp\/v2\/posts\/1079\/revisions"}],"predecessor-version":[{"id":1230,"href":"https:\/\/www.phillips321.co.uk\/wp-json\/wp\/v2\/posts\/1079\/revisions\/1230"}],"wp:attachment":[{"href":"https:\/\/www.phillips321.co.uk\/wp-json\/wp\/v2\/media?parent=1079"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.phillips321.co.uk\/wp-json\/wp\/v2\/categories?post=1079"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.phillips321.co.uk\/wp-json\/wp\/v2\/tags?post=1079"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}