Изменить размер фотографий в виде квадратов, таких как фотопотоки Flickr и Facebook? - PullRequest
3 голосов
/ 01 февраля 2011

Каков наилучший способ изменить размер фотографий и создать квадратные уменьшенные изображения одинакового размера для фотопотоков? Это делают Flickr и Facebook, и мы хотели бы эмулировать эту функцию.

Вот пример: http://www.flickr.com/photos/alphageek/233472093/

Если вы просматриваете фотопоток с правой стороны (средняя страница), все миниатюры имеют одинаковый размер, даже если исходные изображения различаются по размеру, и, что наиболее важно, миниатюры выглядят интеллектуально обрезанными.

Flickr может автоматически обрезать и изменять размер изображения вокруг основного фокуса, в отличие от простого изменения размера изображения до размера миниатюры (например, путем установки ширины и высоты изображения), что приведет к тому, что изображение будет выглядеть сжатым и потерять фокус изображения.

Ответы [ 3 ]

1 голос
/ 02 февраля 2011

они делают укороченный урожай.

если вы используете imagemagick для преобразования, это будет опция #, например, «40x40 #» или «90x90 #», где размер фотографии будет изменен, а затем обрезан для сохранения соотношения сторон при получении как можно большего количества миниатюр. *

программно это выглядит так:

1) изменить размер изображения так, чтобы его короткая сторона была такой, как указано. 2) обрезать середину, поэтому длинная сторона теперь тоже соответствует указанному.

1 голос
/ 15 мая 2015

Да. Сначала вам нужно получить новый размер, сохраняющий соотношение сторон без изменений:

CGFloat horizontalRatio = newSize.width/oldSize.width;
CGFloat verticalRatio = newSize.height/oldSize.height;
CGFloat ratio = MAX(horizontalRatio, verticalRatio);
CGSize newSize = CGSizeMake(oldSize.width *ratio, newSize.height*ratio)

Затем вам нужно перерисовать ваше изображение в новом размере (self - ваше изображение):

UIGraphicsBeginImageContextWithOptions(newSize, YES, 0);
    [self drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

Затем обрежьте до нужного размера:

        CGRect cropRect = CGRectMake ((newImage.size.width - width) / 2, (newImage.size.height - height) / 2, width, height)
        UIGraphicsBeginImageContextWithOptions(cropRect.size, YES, 0); 
        CGContextRef context = UIGraphicsGetCurrentContext();
        CGRect drawRect = CGRectMake(-cropRect.origin.x, -cropRect.origin.y, self.size.width, self.size.height);
        CGContextClipToRect(context, CGRectMake(0, 0, cropRect.size.width, cropRect.size.height));
        [self drawInRect:drawRect];
        UIImage* croppedImage = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
return croppedImage; 
0 голосов
/ 01 февраля 2011

Для таких проблем я всегда использую: http://www.imagemagick.org/script/convert.php.

Imagemagick предоставляет множество функций для манипуляций с изображениями. Я беру изображения в цикле и создаю большую версию и уменьшенную версию.

...