主にプログラミングに関して。Python, .NET Framework(C#), JavaScript, その他いくらか。
記事にあるサンプルやコードは要検証。使用に際しては責任を負いかねます

スポンサーサイト

                
tags:
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

JPEGの一括縮小ツール

                
tags:
120313.jpg

写真の縮小を一括でやりたかったので、フォルダ内のJPEGを一括で縮小するアプリケーションを作った。
1.ディレクトリ移動
2.写真の長辺の指定
3.縮小実行
以上の3ステップ。

以下のストレージのResizeというzipファイル。pyスクリプトが入っているのでmacでもlinuxでも。Windowsのためにexeファイルも入っている。
SkyDrive

Windowsで使うなら以下のものもインストール。
VC2008再配布ファイル


#!/usr/bin/env python
# -*- coding: utf-8 -*-

import os
import glob
from PIL import Image

import pygtk
pygtk.require('2.0')
import gtk
##import cv



#起動時にカレントディレクトリをデスクトップへ
def cd_to_desktop():
## import win32com.client
## com = win32com.client.Dispatch("WScript.Shell")
## os.chdir(com.SpecialFolders("Desktop"))
path = os.path.expanduser("~")
os.chdir(path)
if os.path.isdir("デスクトップ".decode('utf-8').encode('s-jis')):
os.chdir("デスクトップ".decode('utf-8').encode('s-jis'))
elif os.path.isdir("Desktop"):
os.chdir("Desktop")
else:
pass

##def img_resize(nagasa):
## filenames=glob.glob('*.jpg')
## for filename in filenames:
## img=cv.LoadImageM(filename)
## if img.cols!=img.rows:
## chouhen=float((img.cols>img.rows)*img.cols+(img.cols## else:
## chouhen=img.cols
## rate=(float(nagasa)/chouhen)
## img2 = cv.CreateMat(rate*img.rows,rate*img.cols, cv.CV_8UC3)
## cv.Resize(img,img2,cv.CV_INTER_AREA)
## savename='resized_'+filename[:-4]+'.jpg'
## if not (savename in filenames):
## cv.SaveImage(savename, img2)

def img_resize(nagasa):
filenames=glob.glob('*.jpg')
for filename in filenames:
img = Image.open(filename)
width, height = img.size
if width!=height:
chouhen=float((width>height)*width+(width else:
chouhen=width
rate=(float(nagasa)/chouhen)
img = img.resize((int(width*rate), int(height*rate)), Image.ANTIALIAS)
if not ("resized_" + filename) in filenames:
img.save("resized_" + filename, "JPEG")

def dir_incwd():
directories=[]
for x in os.listdir(""):
if os.path.isdir(x):
directories.append(x)
return directories

class ResizeImg:
def __init__(self):
self.builder = gtk.Builder()
#sample.gladeファイルから画面を作成
self.builder.add_from_file("pyhello.glade")
#sample.gladeで定義されているシグナルと連結
self.builder.connect_signals(self)
#windows1というオブジェクトを取得
self.window = self.builder.get_object("window1")
self.window.connect("destroy", lambda w: gtk.main_quit())
self.window.show()
#Glideで作ったオブジェクトをスクリプトとコネクト
self.vbox = self.builder.get_object("scrolledwindow2")
self.dirbox = gtk.VBox(False, 0)
self.vbox.add_with_viewport(self.dirbox)
self.textview = self.builder.get_object("textview1")
self.tbuffer=gtk.TextBuffer()
self.textview.set_buffer(self.tbuffer)
self.builder.get_object("spinbutton1").set_text("500")
cd_to_desktop()

self.dirbox_add()
self.add_imgnames()

self.window.show_all()

def dirbox_add(self):
self.vbox = gtk.VBox(False, 0)
self.dirbox.add(self.vbox)
directories = dir_incwd()
if os.path.isdir('..'):
Button = gtk.Button()
Button.set_label(u"上のフォルダへ")
## Button.set_size_request(100,50)
Button.connect("clicked", self.ch_dir, [".."])
self.vbox.add(Button)
print directories
for directory in directories:
print directory
Button = gtk.Button()
Button.set_label(directory.decode('s-jis').encode('utf-8'))
Button.set_size_request(100,50)
Button.connect("clicked", self.ch_dir, [directory])
self.vbox.add(Button)


def ch_dir(self, widget, data=None):
"""
ボタンを押した時の処理。ディレクトリ移動
"""
print data[0]
try:
os.chdir(data[0])
except:
print "chdir failed"
return 0
## dialog = gtk.MessageDialog(buttons=gtk.BUTTONS_OK)
## dialog.set_markup(os.getcwd())
## #ダイアログの表示
## dialog_select = dialog.run()
## dialog.destroy()

self.dirbox.remove(self.vbox)
self.dirbox_add()
##self.vbox.size_request()
self.add_imgnames()
self.window.show_all()
return False


def image_resize(self, widget):
nagasa = int(self.builder.get_object("spinbutton1").get_text())
img_resize(nagasa)
return 0

def add_imgnames(self):
filenames=glob.glob('*.jpg')
print "\n".join(filenames)
self.tbuffer.set_text("\n".join(filenames))


def main():
gtk.main()
return 0

if __name__ == "__main__":
ResizeImg()
main()
            

コメントの投稿

非公開コメント

プロフィール

hMatoba

Author:hMatoba
Github

最新記事
リンク
作ったものなど
月別アーカイブ
カテゴリ
タグリスト

検索フォーム
Amazon
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。