用python做鹦鹉螺图_加速鹦鹉螺Python阅读图像的Exi

我已经编写了一个Nautilus扩展来读取picture的元数据(执行exiftool),但是当我打开包含许多文件的文件夹时,它确实会减慢文件管理器的运行速度并挂起,直到它读取完文件的数据。在

有没有办法让Nautilus在运行我的分机时继续工作?也许Exif数据可以在我继续工作时逐渐出现在列中。在#!/usr/bin/python

# Richiede:

# nautilus-python

# exiftool

# gconf-python

# Versione 0.15

import gobject

import nautilus

from subprocess import Popen, PIPE

from urllib import unquote

import gconf

def getexiftool(filename):

options = '-fast2 -f -m -q -q -s3 -ExifIFD:DateTimeOriginal -IFD0:Software -ExifIFD:Flash -Composite:ImageSize -IFD0:Model'

exiftool=Popen(['/usr/bin/exiftool'] + options.split() + [filename],stdout=PIPE,stderr=PIPE)

#'-Nikon:ShutterCount' non utilizzabile con l'argomento -fast2

output,errors=exiftool.communicate()

return output.split('\n')

class ColumnExtension(nautilus.ColumnProvider, nautilus.InfoProvider, gobject.GObject):

def __init__(self):

pass

def get_columns(self):

return (

nautilus.Column("NautilusPython::ExifIFD:DateTimeOriginal","ExifIFD:DateTimeOriginal","Data (ExifIFD)","Data di scatto"),

nautilus.Column("NautilusPython::IFD0:Software","IFD0:Software","Software (IFD0)","Software utilizzato"),

nautilus.Column("NautilusPython::ExifIFD:Flash","ExifIFD:Flash","Flash (ExifIFD)","Modalit\u00e0 del flash"),

nautilus.Column("NautilusPython::Composite:ImageSize","Composite:ImageSize","Risoluzione (Exif)","Risoluzione dell'immagine"),

nautilus.Column("NautilusPython::IFD0:Model","IFD0:Model","Fotocamera (IFD0)","Modello fotocamera"),

#nautilus.Column("NautilusPython::Nikon:ShutterCount","Nikon:ShutterCount","Contatore scatti (Nikon)","Numero di scatti effettuati dalla macchina a questo file"),

nautilus.Column("NautilusPython::Mp","Mp","Megapixel (Exif)","Dimensione dell'immagine in megapixel"),

)

def update_file_info_full(self, provider, handle, closure, file):

client = gconf.client_get_default()

if not client.get_bool('/apps/nautilus/nautilus-metadata/enable'):

client.set_bool('/apps/nautilus/nautilus-metadata/enable',0)

return

if file.get_uri_scheme() != 'file':

return

if file.get_mime_type() in ('image/jpeg', 'image/png', 'image/gif', 'image/bmp', 'image/x-nikon-nef', 'image/x-xcf', 'image/vnd.adobe.photoshop'):

gobject.timeout_add_seconds(1, self.update_exif, provider, handle, closure, file)

return Nautilus.OperationResult.IN_PROGRESS

file.add_string_attribute('ExifIFD:DateTimeOriginal','')

file.add_string_attribute('IFD0:Software','')

file.add_string_attribute('ExifIFD:Flash','')

file.add_string_attribute('Composite:ImageSize','')

file.add_string_attribute('IFD0:Model','')

file.add_string_attribute('Nikon:ShutterCount','')

file.add_string_attribute('Mp','')

return Nautilus.OperationResult.COMPLETE

def update_exif(self, provider, handle, closure, file):

filename = unquote(file.get_uri()[7:])

data = getexiftool(filename)

file.add_string_attribute('ExifIFD:DateTimeOriginal',data[0].replace(':','-',2))

file.add_string_attribute('IFD0:Software',data[1])

file.add_string_attribute('ExifIFD:Flash',data[2])

file.add_string_attribute('Composite:ImageSize',data[3])

file.add_string_attribute('IFD0:Model',data[4])

#file.add_string_attribute('Nikon:ShutterCount',data[5])

width, height = data[3].split('x')

mp = float(width) * float(height) / 1000000

mp = "%.2f" % mp

file.add_string_attribute('Mp',str(mp) + ' Mp')

Nautilus.info_provider_update_complete_invoke(closure, provider, handle, Nautilus.OperationResult.COMPLETE)

return false

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值