def test_off_by_one_bug(self): img_path = self.create_unique_image('best-fit-off-by-one-bug.png') crop = Crop(Box(x1=0, y1=0, x2=960, y2=915), img_path) size = Size('960', w=960, h=594) new_crop = size.fit_to_crop(crop) self.assertNotEqual(new_crop.box.h, 593, "Calculated best fit height is 1 pixel too short") self.assertEqual(new_crop.box.h, 594)
def test_size_order_bug(self): img_path = self.create_unique_image('size-order-bug.png') crop = Crop(Box(x1=160, y1=0, x2=800, y2=640), img_path) size = Size('650', w=650, min_h=250) new_crop = size.fit_to_crop(crop) self.assertGreaterEqual(new_crop.box.w, 650, "Calculated best fit (%d) didn't get required width (650)" % new_crop.box.w)
def crop_size(self): from cropduster.resizing import Size size_json = self.get('size', {}).get('json') or None if size_json: return size_json size_w = self.get('size', {}).get('w') or None size_h = self.get('size', {}).get('h') or None if not size_w and not size_h: return None return Size('crop', w=size_w, h=size_h)
def object_hook(dct): if dct.get('__type__') in ['Size', 'cropduster.resizing.Size']: return Size(name=dct.get('name'), label=dct.get('label'), w=dct.get('w'), h=dct.get('h'), min_w=dct.get('min_w'), min_h=dct.get('min_h'), max_w=dct.get('max_w'), max_h=dct.get('max_h'), retina=dct.get('retina'), auto=dct.get('auto'), required=dct.get('required')) return dct
def test_get_min_size(self): from cropduster.utils import get_min_size from cropduster.resizing import Size sizes = [ Size('a', w=200, h=200), Size('b', w=100, h=300), Size('c', w=20, h=20) ] self.assertEqual(get_min_size(sizes), (200, 300)) sizes = [ Size('a', min_w=200, min_h=200, max_h=500), Size('b', min_w=100, min_h=300), Size('c', w=20, h=20) ] self.assertEqual(get_min_size(sizes), (200, 300))