ios: Better check for alpha channel existing (#1616)

* ios: Better check for PNG

* Renamed
This commit is contained in:
Stanislav Dmitrenko
2022-12-21 19:05:45 +03:00
committed by GitHub
parent ece928d57e
commit 372d7ffaa9

View File

@@ -209,7 +209,7 @@ public func saveFileFromURL(_ url: URL) -> String? {
public func saveImage(_ uiImage: UIImage) -> String? {
if let imageDataResized = resizeImageToDataSize(uiImage, maxDataSize: MAX_IMAGE_SIZE) {
let ext = uiImage.isPng() ? "png" : "jpg"
let ext = uiImage.hasAlpha() ? "png" : "jpg"
let fileName = generateNewFileName("IMG", ext)
return saveFile(imageDataResized, fileName)
}
@@ -287,7 +287,7 @@ public func cropToSquare(_ image: UIImage) -> UIImage {
func resizeImageToDataSize(_ image: UIImage, maxDataSize: Int64) -> Data? {
var img = image
let usePng = image.isPng()
let usePng = image.hasAlpha()
var data = usePng ? img.pngData() : img.jpegData(compressionQuality: 0.85)
var dataSize = data?.count ?? 0
while dataSize != 0 && dataSize > maxDataSize {
@@ -317,8 +317,8 @@ public func resizeImageToStrSize(_ image: UIImage, maxDataSize: Int64) -> String
}
func compressImageStr(_ image: UIImage, _ compressionQuality: CGFloat = 0.85) -> String? {
let ext = image.isPng() ? "png" : "jpg"
if let data = image.isPng() ? image.pngData() : image.jpegData(compressionQuality: compressionQuality) {
let ext = image.hasAlpha() ? "png" : "jpg"
if let data = image.hasAlpha() ? image.pngData() : image.jpegData(compressionQuality: compressionQuality) {
return "data:image/\(ext);base64,\(data.base64EncodedString())"
}
return nil
@@ -333,14 +333,15 @@ private func reduceSize(_ image: UIImage, ratio: CGFloat) -> UIImage {
private func resizeImage(_ image: UIImage, newBounds: CGRect, drawIn: CGRect) -> UIImage {
let format = UIGraphicsImageRendererFormat()
format.scale = 1.0
format.opaque = !image.isPng()
format.opaque = !image.hasAlpha()
return UIGraphicsImageRenderer(bounds: newBounds, format: format).image { _ in
image.draw(in: drawIn)
}
}
extension UIImage {
func isPng() -> Bool {
return cgImage?.alphaInfo.rawValue == 1
func hasAlpha() -> Bool {
let alpha = cgImage?.alphaInfo
return alpha == .first || alpha == .last || alpha == .premultipliedFirst || alpha == .premultipliedLast || alpha == .alphaOnly
}
}