簡體   English   中英

iMessage 應用程序如何調整圖像大小並保持該縱橫比

[英]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)
}

結果是一個tableView

這就是算法如何調整較小圖像的大小

調整大小的較小圖像

這些是通過消息發送的相同圖像

消息如何調整大小

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM