หากคุณไม่ทราบว่าภาพจะเป็นแนวตั้งหรือแนวนอน (เช่นผู้ใช้ถ่ายภาพด้วยกล้อง) ฉันได้สร้างวิธีการอื่นที่ใช้พารามิเตอร์ความกว้างและความสูงสูงสุด
สมมติว่าคุณมีUIImage *myLargeImage
อัตราส่วน 4: 3
UIImage *myResizedImage = [ImageUtilities imageWithImage:myLargeImage
scaledToMaxWidth:1024
maxHeight:1024];
UIImage ที่ปรับขนาดจะเป็น 1024x768 หากเป็นแนวนอน 768x1024 ถ้าเป็นแนวตั้ง วิธีนี้จะสร้างภาพที่มีความละเอียดสูงขึ้นสำหรับการแสดงเรตินา
+ (UIImage *)imageWithImage:(UIImage *)image scaledToSize:(CGSize)size {
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)]) {
UIGraphicsBeginImageContextWithOptions(size, NO, [[UIScreen mainScreen] scale]);
} else {
UIGraphicsBeginImageContext(size);
}
[image drawInRect:CGRectMake(0, 0, size.width, size.height)];
UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return newImage;
}
+ (UIImage *)imageWithImage:(UIImage *)image scaledToMaxWidth:(CGFloat)width maxHeight:(CGFloat)height {
CGFloat oldWidth = image.size.width;
CGFloat oldHeight = image.size.height;
CGFloat scaleFactor = (oldWidth > oldHeight) ? width / oldWidth : height / oldHeight;
CGFloat newHeight = oldHeight * scaleFactor;
CGFloat newWidth = oldWidth * scaleFactor;
CGSize newSize = CGSizeMake(newWidth, newHeight);
return [ImageUtilities imageWithImage:image scaledToSize:newSize];
}
newWidth
ตัวแปรที่นี่i_width
แต่มันมีอยู่แล้ว