[英]How the iMessage App resize the images and keep that aspect ratio
我知道這個問題並不清楚。 但我想知道 iMessage App 在我們發送圖像時如何調整圖像大小。 讓我通過向您展示來澄清它..
在這里我發送一個大小的圖像: 1668x2500
但是當我用 Photoshop 測量保存的屏幕截圖時,如黑色矩形所示,它顯示: 846x1128
我必須在那個箭頭的右下角末端測量圖像。 因為圖像那么大,而 imessage 正在掩蓋該圖像。
我嘗試了其他不同尺寸的圖像,如下表所示: 渲染尺寸是指在設備上由 Photoshop 測量的尺寸。
我所知道的。 iMessage 使用的最大大小846x1143
。 除此之外,它不會 go 。 並在該坐標空間中調整圖像的大小。
太棒了。 我想知道 iMessage 用來調整圖像大小的公式。 請幫忙
只能猜測他們的調整大小算法,但您可以通過幾次計算得出非常接近的結果。 首先將 imageView 的內容模式設置為.scaleAspectFill
。 創建一個變量來保存您想要的最大寬度和最大高度。 將圖像的寬度與最大寬度進行比較,如果圖像較寬,則將最大寬度除以圖像寬度以獲得縮放乘數並將高度乘以該乘數。 如果寬度不大於最大寬度,則檢查高度是否大於最大高度以及是否乘以比例和圖像寬度。 對於計算出的寬度或高度,您需要確保兩者都不大於它們各自的最大值。
let image = UIImage(named: "myImage")
let calculatedSize = calculateSize(for: image)
myImageView.frame = CGRect(origin: myImageView.frame.origin, size: calculatedSize)
myImageView.contentMode = .scaleAspectFill
myImageView.clipsToBounds = true
//myImageView.layer.cornerRadius = 15
func calculateSize(for image: UIImage?) -> CGSize {
guard let image = image else { return .zero }
let widthMax: CGFloat = 260
let heightMax: CGFloat = 350
let maxMultiplier: CGFloat = 1.5
var width: CGFloat = image.size.width
var height: CGFloat = image.size.height
var multiplier: CGFloat = 1.0
print(["original", (width, height)])
if width < widthMin {
multiplier = widthMin / width
width = multiplier * width
height = multiplier * height
} else if height < heightMin {
multiplier = heightMin / height
width = multiplier * width
height = multiplier * height
} else if width < widthMax && width > height {
let originalWidth = width
multiplier = widthMax / width
width = min(maxMultiplier * width, multiplier * width)
height = (width / originalWidth) * height
} else if height < heightMax && height >= width {
let originalHeight = height
multiplier = heightMax / height
height = min(maxMultiplier * height, multiplier * height)
width = (height / originalHeight) * width
}
if width >= widthMax {
multiplier = widthMax / width
width = widthMax
height = min(heightMax, height * multiplier)
} else if height >= heightMax {
multiplier = heightMax / height
width = min(widthMax, width * multiplier)
height = heightMax
}
print(["resize", (width, height)])
return CGSize(width: width, height: height)
}
這就是算法如何調整較小圖像的大小
這些是通過消息發送的相同圖像
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.