Есть ли способ изменить размер UIImage как можно меньше строк? Я не против соотношения, я просто хочу установить разрешение изображения на 80x60. Это всеПростое изменение размера UIImage в XCODE
ответ
Это может быть излишним, но вы можете просто взять свое изображение и создать графический контекст с нужным разрешением, тогда вы можете установить tempImage как UIImageView, перезаписывая его.
UIImage *image = YourImageView.image;
UIImage *tempImage = nil;
CGSize targetSize = CGSizeMake(80,60);
UIGraphicsBeginImageContext(targetSize);
CGRect thumbnailRect = CGRectMake(0, 0, 0, 0);
thumbnailRect.origin = CGPointMake(0.0,0.0);
thumbnailRect.size.width = targetSize.width;
thumbnailRect.size.height = targetSize.height;
[image drawInRect:thumbnailRect];
tempImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
YourImageView.image = tempImage;
Используйте этот класс (добавить код в .h файл соответственно)
#import "UIImage+Resize.h"
@implementation UIImage (Resize)
- (UIImage *)resizedImage:(CGSize)bounds {
return [self resizedImage:bounds upScale:YES];
}
- (UIImage*)resizedImage:(CGSize)bounds upScale:(BOOL)upScale {
CGSize originalSize = self.size;
float xScale = bounds.width/originalSize.width;
float yScale = bounds.height/originalSize.height;
float scale = MIN(xScale, yScale);
if (!upScale) {
scale = MIN(scale, 1);
}
CGSize newSize = CGSizeMake(originalSize.width * scale, originalSize.height * scale);
UIGraphicsBeginImageContextWithOptions(newSize, NO, [UIScreen mainScreen].scale);
[self drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
UIImage *resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resultImage;
}
- (void)resizeImage:(UIImage *)image
{
CGSize origImageSize = [image size];
CGRect imageRect = CGRectMake(0, 0, 80, 60);
float ratio = MAX(newRect.size.width/origImageSize.width,
newRect.size.height/origImageSize.height);
UIGraphicsBeginImageContextWithOptions(newRect.size, NO, 0.0);
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:newRect
cornerRadius:5.0];
[path addClip];
CGRect imageRect;
imageRect.size.width = ratio * origImageSize.width;
imageRect.size.height = ratio * origImageSize.height;
imageRect.origin.x = (newRect.size.width - imageRect.size.width)/2.0;
imageRect.origin.y = (newRect.size.height - imageRect.size.height)/2.0;
[image drawInRect:imageRect];
UIImage *smallImage = UIGraphicsGetImageFromCurrentImageContext();
NSData *data = UIImagePNGRepresentation(smallImage);
UIGraphicsEndImageContext();
}
Не забудьте добавить CoreGraphics frameawork.
Я нашел следующий код на this page:
- (UIImage*)imageWithImage: (UIImage*) sourceImage scaledToWidth: (float) i_width{
if (sourceImage.size.width>sourceImage.size.height) {
sourceImage = [[UIImage alloc] initWithCGImage: sourceImage.CGImage
scale: 1.0
orientation: UIImageOrientationRight];
}
float oldWidth = sourceImage.size.width;
float scaleFactor = i_width/oldWidth;
float newHeight = sourceImage.size.height * scaleFactor;
float newWidth = oldWidth * scaleFactor;
UIGraphicsBeginImageContext(CGSizeMake(newWidth, newHeight)); [sourceImage drawInRect:CGRectMake(0, 0, newWidth, newHeight)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();
return newImage;
}
Все, что вам нужно сделать, это предоставить ему i_width
, и он будет масштабировать его соответствующим образом.
Я добавил к нему немного поворота, так что, если изображение находится в ландшафтном режиме, оно будет повернуто до портрета, а затем изменено. Если вы хотите, чтобы быть противоположным (портрет в пейзаже), изменить:
if (sourceImage.size.width>sourceImage.size.height) {
sourceImage = [[UIImage alloc] initWithCGImage: sourceImage.CGImage
scale: 1.0
orientation: UIImageOrientationRight];
}
к этому:
if (sourceImage.size.height>sourceImage.size.width) {
sourceImage = [[UIImage alloc] initWithCGImage: sourceImage.CGImage
scale: 1.0
orientation: UIImageOrientationRight];
}
CAVEAT: мой вращающийся метод не принимает во внимание, если изображение указывает влево или вправо. Другими словами, если изображение имеет пейзаж вверх дном, мой код не может распознать это. Я надеюсь, что кто-то еще может пролить свет на это, хотя :)
- 1. Простое изменение размера окна
- 2. Резьбовое изменение размера UIImage?
- 3. Изменение размера UIImage
- 4. UIImage нелинейное изменение размера
- 5. Изменение размера содержимого UIImage
- 6. простое изменение размера и центрирования?
- 7. Objective C - изменение размера UIImage
- 8. Изменение размера UIImage не работает
- 9. Изменение размера UIImage пропорционально урожая
- 10. изменение размера uiimage перелистывает его?
- 11. Изменение размера UIImage инвертирует ориентацию
- 12. Изменение размера таблицы TableView UIImage в iOS
- 13. Изменение размера изображения в XCode?
- 14. Изменение размера UIImage для установки ширины устройства
- 15. Перетаскивание/изменение размера UIImage на устройстве
- 16. Изменение размера UIImage по ограничениям памяти
- 17. Изменение размера UIImage с жесткими краями
- 18. Изменение размера UIImage - Проблемы с производительностью
- 19. Изменение размера UIImage занимает много времени?
- 20. UIImage изменение размера и качество выпуска
- 21. Изменение размера UIImage/UIImageView без сохранения пропорций
- 22. uiimage изменение размера по масштабному коэффициенту
- 23. Изменение размера UIImage до 100% и урожай
- 24. UIImage + Изменение размера сбоев без предупреждения памяти
- 25. Изменение размера IOS UIImage не работает
- 26. UIImage размера фактического размера
- 27. Изменение размера текста в xcode версии 6.3
- 28. Простое изменение ограничений прокрутки?
- 29. Xcode: изменение размера изображения в зависимости от размера экрана
- 30. Изменение NSData Размер UIImage - сжатие и изменение размера UIImage с максимальным пределом Mb мегабайта
why overkill ??? Я имею в виду, он работает, но имеет ли он какой-либо негативный эффект? – user1602687
Вы сказали, что хотите несколько строк. это похоже на 10, lol. Никаких отрицательных эффектов! – ApolloSoftware
Я пробовал это, но он заканчивается размытым? – Lion789