Ich habe Probleme, die Größe eines Bildes zu ändern. Grundsätzlich bin ich auf Folgendes gestoßen: Wie kann ich ein UIImage verkleinern und es gleichzeitig knusprig / scharf machen, anstatt es zu verwischen?
Dies scheint eine legitime Lösung zu sein, aber irgendwie funktioniert es nicht richtig.
Meine App funktioniert mit Fotos von der Kamerarolle. Die Größe dieser Fotos sollte auf etwa 200 x 200 geändert werden, wobei die Breite und nicht die Höhe wichtig sind.
Leider habe ich keinen Beispielcode, da ich ihn in meiner Wut über nicht funktionierende Lösungen verworfen habe, sorry.
Antworten:
Hier ist mein Code. Das Bild hat eine Breite von 850 px und keine 200 px:
quelle
func resizeImage(image: UIImage, newWidth: CGFloat) -> UIImage { let scale = newWidth / image.size.width let newHeight = image.size.height * scale UIGraphicsBeginImageContext(CGSize(width: newWidth, height: newHeight)) image.draw(in: CGRect(x: 0, y: 0, width: newWidth, height: newHeight)) let newImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return newImage! }
Basierend auf der Antwort von swift_dan ein Update für Swift 3
quelle
Wenn Sie mit PNG-Bildern arbeiten, die Transparentfolien enthalten, konvertiert die akzeptierte Antwortfunktion die transparenten Bereiche tatsächlich in Schwarz.
Wenn Sie die Folien skalieren und an Ort und Stelle halten möchten, versuchen Sie diese Funktion:
SWIFT 4
quelle
let scale = UIScreen.main.scale let newImage = UIImage(cgImage: context.makeImage()!, scale: scale, orientation: .up)
Fügen Sie einfach dieses Snippet als Erweiterung hinzu
UIImage
. Denken Sie jedoch daran, dass das Bild nicht in quadratischer Form erstellt wird. Wenn es jedoch in dieser Form vorliegt, ist das Ergebnis quadratisch.quelle
Swift 4.0 -
Wenn Sie mit Bildern arbeiten, die Transparentfolien enthalten, konvertiert die akzeptierte Antwortfunktion die transparenten Bereiche tatsächlich in Schwarz.
Wenn Sie die Folien skalieren und an Ort und Stelle halten möchten, versuchen Sie diese Funktion:
quelle
Dieser Code verwendet den in iOS 10 eingeführten UIGraphicsImageRenderer : In meinen Tests war er 10-40% schneller als frühere Beispiele mit UIGraphicsBeginImageContext (Swift 4 / Xcode 9):
quelle
Diese Funktion gibt ein Bild mit der von Ihnen angegebenen Breite zurück :
Swift 3.0
quelle
Weitere Verbesserung der Antwort von @rommex unter Verwendung einer maximalen Größe in Swift 4.2:
quelle
Dieser Code funktioniert hervorragend bei quadratischen Bildern und verliert nicht an Qualität
Antwort von: Ändern Sie die Bildgröße, ohne an Qualität zu verlieren
quelle
Wenn Sie kingfisher lib zum Laden von Bildern in Ihr Projekt verwenden und die Größe ändern möchten, gehen Sie wie folgt vor:
ODER
Lokale Bildgröße ändern: - Sie können sich auf die Antwort von @Christoph R beziehen
quelle
quelle
Reduzieren Sie die Bildgröße um 1024, Sie können immer entsprechend der Serverkapazität konvertieren
quelle
Dies ist eine Fortsetzung der Antwort von @Christoph R, die für Swift 3.0 veröffentlicht wurde. Dieser Code funktioniert für Swift 5.0.1.
bei Anrufern vor Ort
quelle