Разница между сжатием и качеством и уменьшением размера изображения (высота и ширина) в Swift - PullRequest
0 голосов
/ 29 апреля 2020

В следующем коде я загружаю изображения на сервер, уменьшая его качество сжатия, а также уменьшая размер (высоту и ширину изображения. Но я хочу знать, что действительно происходит в обоих случаях. Если я буду только уменьшить сжатиеКачество или только сжать высоту и ширину перкулярного, что произойдет? Может кто-нибудь объяснить мне эту концепцию.

func compressImage() -> UIImage? {

    enum JPEGQuality: CGFloat {
        case lowest  = 0
        case low     = 0.25
        case medium  = 0.5
        case high    = 0.75
        case highest = 1
    }

    // Reducing file size to a 10th
    var actualHeight: CGFloat = self.size.height
    var actualWidth: CGFloat = self.size.width
    print("DEBUG: actualHeight \(actualHeight)")
    print("DEBUG: actualWidth \(actualWidth)")

    //For iphone 5s
    let maxHeight: CGFloat = 1136.0
    let maxWidth: CGFloat = 640.0


    var imgRatio: CGFloat = actualWidth/actualHeight
    let maxRatio: CGFloat = maxWidth/maxHeight
    var compressionQuality: CGFloat = JPEGQuality.highest.rawValue

    if actualHeight > maxHeight || actualWidth > maxWidth {
        compressionQuality = JPEGQuality.high.rawValue
        if imgRatio < maxRatio {
            //adjust width according to maxHeight
            imgRatio = maxHeight / actualHeight
            actualWidth = imgRatio * actualWidth
            actualHeight = maxHeight

            print("DEBUG: actualHeight after compression  \(actualHeight)")
            print("DEBUG: actualWidth after compression \(actualWidth)")
        } else if imgRatio > maxRatio {
            //adjust height according to maxWidth
            imgRatio = maxWidth / actualWidth
            actualHeight = imgRatio * actualHeight
            actualWidth = maxWidth
            print("DEBUG: actualHeight after compression  \(actualHeight)")
            print("DEBUG: actualWidth after compression \(actualWidth)")
        } else {
            actualHeight = maxHeight
            actualWidth = maxWidth
            compressionQuality = JPEGQuality.highest.rawValue
            print("DEBUG: actualHeight after compression  \(actualHeight)")
            print("DEBUG: actualWidth after compression \(actualWidth)")
        }
    }
    let rect = CGRect(x: 0.0, y: 0.0, width: actualWidth, height: actualHeight)
    UIGraphicsBeginImageContext(rect.size)
    self.draw(in: rect)
    guard let img = UIGraphicsGetImageFromCurrentImageContext() else {
        return nil
    }
    UIGraphicsEndImageContext()
    guard let imageData = img.jpegData(compressionQuality: compressionQuality) else {
        return nil
    }
    print("DEBUG: IMAGE DATA IS \(imageData)")

    return UIImage(data: imageData)
}

Ответы [ 2 ]

0 голосов
/ 29 апреля 2020

UIImageview автоматически масштабируется и обрезается в соответствии с поведением, заданным свойством режима содержимого.

imageView.contentMode = .scaleAspectFit
imageView.image = image

Тогда зачем нам нужно изменять размер этого изображения? Когда он больше, чем изображение, которое его отображает. Допустим, у вас есть изображение размером 30 МБ. Чтобы отобразить это изображение в изображении, сначала необходимо декодировать JPEG в растровое изображение. это займет много памяти для подгонки, что на изображении, а также приложение может стать медленным для пользователя. Вот почему мы используем изменение размера изображения. есть техника. Это называется понижающей выборкой. Таким образом, изменение размера изображения означает, что вы собираетесь сократить разрешение изображения. таким образом размер изображения будет уменьшен.

Сжатие изображения уменьшает размер файла изображения без ущерба для разрешения. Конечно, уменьшение размера файла повлияет на качество изображения.

0 голосов
/ 29 апреля 2020

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

В большинстве случаев у вас есть определенный размер, который вы хотите, чтобы изображение отображалось. Специально для веб-дизайна. Если вы хотите сэкономить на времени загрузки и размере файла, вы можете выбрать сжатие изображения или сравнить сохранение изображения как jpg vs png. Каждый из которых использует другой алгоритм сжатия из коробки.

Вы можете просто сделать изображение меньше по размеру в пикселях. Но тогда вы будете растягивать свое изображение, чтобы оно соответствовало большему размеру, и оно нигде не было бы таким четким.

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

Изменение изображения любым способом всегда будет влиять на качество.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...