Ich erhalte ein Bild aus dem Backend, das eine große Größe ist, wie ich das gleiche Bild als Profilbild und zeigen Sie das gleiche Bild auf untere Leiste in der Tableiste der Größe 30x30. Ich habe versucht, das Bild auf verschiedene Arten zu verkleinern, aber nichts funktioniert.Scale ein sehr großes Bild auf sehr kleine Größe ohne Verzerrung und Qualitätsverlust
Methode Alamofire versucht hat, das auch nicht funktioniert hat (das Bild erscheint verschwommen und verzerrt werden):
func resizeImageWithoutDistortion(image: UIImage, size : CGSize) -> UIImage{
// 1. Scale image to size disregarding aspect ratio
let scaledImage = image.af_imageScaled(to: size)
// 2. Scale image to fit within specified size while maintaining aspect ratio
let aspectScaledToFitImage = image.af_imageAspectScaled(toFit: size)
// 3. Scale image to fill specified size while maintaining aspect ratio
let aspectScaledToFillImage = image.af_imageAspectScaled(toFill: size)
return scaledImage.roundImage()
}
auch versucht, wie folgt, die auch nicht gearbeitet hat:
func resizeImage(_ newWidth: CGFloat) -> UIImage {
let ratio = size.width/size.height
if ratio > 1 {
UIGraphicsBeginImageContext(CGSize(width: newWidth, height: newWidth))
draw(in: CGRect(x: newWidth * ratio/2 - newWidth, y: 0, width: newWidth * ratio, height: newWidth))
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage!.roundImage()
} else {
UIGraphicsBeginImageContext(CGSize(width: newWidth, height: newWidth))
draw(in: CGRect(x: 0, y: (newWidth/ratio - newWidth)/2 * (-1), width: newWidth, height: newWidth/ratio))
let newImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return newImage!.roundImage()
}
}
In der Screenshot das Bild im unteren Bereich ist sehr verzerrt.
Bitte aktualisieren Sie Ihren Beitrag mit dem, was Sie damit meinen nicht funktioniert, und wenn Sie schon dabei sind: eine Frage sind (dies ist ein Q & A-Site, keine V & S-Site (Vague-description & Suggestion) Sie sollten auch detailliert angeben, wie die Originalbilder aussehen, denn wenn Sie nicht mit hochauflösenden, aber wenig detaillierten Bildern beginnen, können Sie sie nicht auf 30x30 skalieren ohne Qualitätsverlust (und die damit verbundene Verzerrung. ZB indem ich beschreibe, dass die hochauflösenden Bilder ursprünglich aus 30x30 Bildern gesprengt wurden. – Anthon
Hallo, ich habe den Screenshot und al Ich möchte die Qualität des Bildes sowohl im Profilbild als auch in der unteren Leiste beibehalten. – Ishika
Ich nehme an, UIImage sollte das von sich aus tun. Ändern Sie einfach nicht die Größe des Bildes. Lass es so groß bleiben und benutze die Seitenfülle. Um ein Bild rund zu machen, verwende die Ebene des UIImage und runde das, anstatt das Bild wirklich zu manipulieren. Das ist eine sehr kostspielige Operation. Stellen Sie sicher, dass der Aspekt in dieser Bildansicht 1: 1 ist. – BennX