Форум сайта python.su
3
Имеется jpeg-файл, сохраненный в максимально возможном качестве.
Задача: пересохранить этот файл в более низком разрешении и качестве.
from PIL import Image
def resave_pict(path2file):
'''Пересохраняет конкретный файл в среднем качестве'''
print u'Пересохраняем файл', path2file
im=open(path2file, 'rb')
myimg=Image.open(im)
im.close()
if myimg.mode not in ('L', 'RGB'):
myimg = myimg.convert('RGB')
sizes=myimg.size
if max(sizes)>1200:
maxsize=1200
else:
maxsize=max(sizes)
myimg.thumbnail(maxsize, Image.NEAREST)
myimg.save(path2file)
Отредактировано Dr.Livsi (Июль 5, 2012 11:01:34)
Офлайн
3
Все, разобрался. import надо было в тело процедуры поместить.
Отредактировано Dr.Livsi (Июль 5, 2012 22:19:43)
Офлайн
72
Dr.LivsiНе понял?! Это не весь код? Там где-то Image переопределялся?
Все, разобрался. import надо было в тело процедуры поместить.
Офлайн
3
PooHDr.LivsiНе понял?! Это не весь код? Там где-то Image переопределялся?
Все, разобрался. import надо было в тело процедуры поместить.
Офлайн
72
Dr.LivsiЕсли не жалко, покажите целиком, хотя бы электропочтой, интересно, чудес то не бывает
Код не весь, но в том то и странность, что Image не переопределялся.
Офлайн
3
PooHне жалко, постараюсь сбросить в ближайшее время.Dr.LivsiЕсли не жалко, покажите целиком, хотя бы электропочтой, интересно, чудес то не бывает
Код не весь, но в том то и странность, что Image не переопределялся.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os, distutils.filelist
# from PIL import Image
# import Image
from Tkinter import *
import tkMessageBox
class ResaveJPG(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack({'padx':5, 'pady':5})
self.createWidgets()
def createWidgets(self):
self.ent=Entry(self, width=50)
self.ent.insert(0,u'Путь к папке')
self.btn=Button(self, width=10, text=u'Пуск')
self.btn.bind('<Button-1>', lambda _:resave_all(self.ent.get()))
self.ent.grid(row=0, column=0, padx=5, pady=5, sticky=N)
self.btn.grid(row=0, column=1, padx=5, pady=5, sticky=N)
def myfltr(path2file):
if path2file.count('_720')==0 and path2file.count('_160')==0 and path2file.lower().count('.jpg')!=0:
return True
def resave_pict(path2file):
'''Пересохраняет конкретный файл в среднем качестве'''
from PIL import Image
print u'Пересохраняем файл', path2file
im=open(path2file, 'rb')
myimg=Image.open(im)
if myimg.mode not in ('L', 'RGB'):
myimg = myimg.convert('RGB')
sizes=myimg.size
if max(sizes)>1200:
maxsize=1200
else:
maxsize=max(sizes)
try:
myimg.thumbnail((maxsize,maxsize), Image.NEAREST)
myimg.save(path2file)
except IOError:
print u'Файл', path2file, u'не пересохранен'
im.close()
def resave_all(path):
'''Ищет jpeg файлы в папке path рекурсивно. Убирает 720 и 160. Оригиналы пересохраняет в среднем качестве'''
a=distutils.filelist.findall(path)
b=filter(myfltr, a)
map(resave_pict,b)
print u'Файлы пересохранены'
def run_resave(master=Tk()):
app=ResaveJPG(master)
app.master.title(u'Уменьшаем размер фотографий!')
app.mainloop()
if __name__=='__main__': run_resave()
Отредактировано Dr.Livsi (Июль 13, 2012 22:09:39)
Офлайн
16
Dr.Livsi,
>>> from Tkinter import * >>> Image <class Tkinter.Image at 0x016D0CA8> >>>
from XXX import *
Отредактировано GaiveR (Июль 15, 2012 17:30:21)
Офлайн