Главная > Coding > Умный ресайз

Умный ресайз

18 Июнь 2009 Михаил

2009-03-17-175748Часто бывает задача максимально подогнать картинку под нужные размеры и зачастую соотношение сторон исходного изображения не совпадает с тем, что нам нужно. Kole Calhoun Baseball Jersey По-этому мы изменяем размер до совпадения по размерам одной из сторон первоначального изображения, air max pas cher ресайзим сохраняя пропорции и подгоняем под нужные размеры обрезая лишнее, nike air zoom schoenen выбрав нужную область в центре изображения. new balance Chaussures Вот я решил написать маленький класс решающий эту проблему:

# -*- coding: UTF8 -*- """ @author: Mikhail Mangushev @since: 16/03/2009 13:16:26 @summary: инструменты для работы с изображениями """ import Image class mxImage: """ Класс для работы с изображениями @param imagefile: изображение @note: не забывайте,  nike air max chaussure что объект imagefile можно открывать используя StringIO """ def __init__ (self,  Scarpe Adidas Italia imagefile) : self.img = Image.open(imagefile) self.newimg = self.img """ smart_resize((800,600)) - умный ресайз картинки,  Nike Air Jordan Baratas по короткой стороне,  nike air max pas cher а лишнее обрезается по центру @param size: словарь с размерами (ширина,  hogan scarpes italia высота) """ def smart_resize(self,size=(100,100)): (width,height,x1,y1,x2,y2) = self.scale_dimensions(size) self.newimg = self.img.resize((width,height),  Maglie Milwaukee Bucks Image.ANTIALIAS) self.newimg = self.newimg.crop((x1,y1,x2,y2)) return self.newimg """ save_newimg('/path/to/media/file.name') - сохранить экземпляр нового измененного изображения @param save_path: путь к файлу """ def save_newimg(self,save_path): self.newimg.save(save_path) return 1 """ scale_dimensions((ширина,высота)) - возвращает значение разницы существующего изображения и нового @param size: (ширина,высота) """ def scale_dimensions(self, 

Categories: Coding Tags: , , ,
  • 19 Март 2009 в 16:49 | #1

    Ужасно бесчеловечный стиль приема аргументов – если бы я такое нашел в встроенных библиотеках какого-либо фремворка, я бы не поленился оторвать руки программисту. Принимай опционально либо tuple, либо два аргумента, а потом в зависимости от того, что пришло, преобразозовывай последние в tuple.

    А так – лишь бы работало.

    new_image.smart_resize((200,600)) #это крайне плохая запись, мы же не на LISP кодим, правда? Думай о разработчике

    • 19 Март 2009 в 17:30 | #2

      В конфиге держим imageSize = (200,600) и обращение упрощается new_images.smart_resize(imageSize)
      Вообще лучше использовать tuple, но это показательный пример, не хотел перегружать…