Ich hatte vor kurzem ein Problem beim Erstellen eines Gif, wo, wenn es zu groß wurde, Farben fehlten. Dank der Hilfe von SO konnte mir jemand helfen, eine Arbeit zu finden und meine eigene Farbkarte zu erstellen.Erstellen von Gif Image Color Maps in iOS 11
Vorhergehende Frage hier ... iOS Colors Incorrect When Saving Animated Gif
Das bis iOS große aufgearbeitet 11. Ich kann nichts in der Dokumentation finden, die geändert und kann dieses nicht mehr funktioniert. Was ich gefunden habe ist, wenn ich entferne kCGImagePropertyGIFImageColorMap
Ein GIF wird generiert, aber es hat das ursprüngliche Problem, wo Farben fehlen, wenn das GIF zu groß wie meine vorherige Frage wird. Dies ist sinnvoll, da dies hinzugefügt wurde, um dieses Problem zu beheben.
Mutmaßliche Ausgabe ...
func createGifFromImage(_ image: UIImage) -> URL{
let fileProperties: [CFString: CFDictionary] = [kCGImagePropertyGIFDictionary: [
kCGImagePropertyGIFHasGlobalColorMap: false as NSNumber] as CFDictionary]
let documentsDirectoryPath = "file://\(NSTemporaryDirectory())"
if let documentsDirectoryURL = URL(string: documentsDirectoryPath){
let fileURL = documentsDirectoryURL.appendingPathComponent("test.gif")
let destination = CGImageDestinationCreateWithURL(fileURL as CFURL, kUTTypeGIF, 1, nil)!
CGImageDestinationSetProperties(destination, fileProperties as CFDictionary);
let colorMap = image.getColorMap()
print("ColorMap \(colorMap.exported as NSData)")
let frameProperties: [String: AnyObject] = [
String(kCGImagePropertyGIFImageColorMap): colorMap.exported as NSData
]
let properties: [String: AnyObject] = [
String(kCGImagePropertyGIFDictionary): frameProperties as AnyObject
]
CGImageDestinationAddImage(destination, image.cgImage!, properties as CFDictionary);
if (!CGImageDestinationFinalize(destination)) {
print("failed to finalize image destination")
}
return fileURL
}
//shouldn't get here
return URL(string: "")!
}
Hier ist ein Link ein Testprojekt zum Download bereit. Beachten Sie, wenn Sie es auf einem 10.3-Simulator ausführen, funktioniert es großartig, aber wenn Sie es auf iOS 11 ausführen, ist es ein weißes Bild.
https://www.dropbox.com/s/hdmkwyz47ondd52/gifTest2.zip?dl=0
Andere Code, auf die verwiesen wird ...
extension UIImage{
//MARK: - Pixel
func getColorMap() -> ColorMap {
var colorMap = ColorMap()
let pixelData = self.cgImage!.dataProvider!.data
let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)
var byteIndex = 0
for _ in 0 ..< Int(size.height){
for _ in 0 ..< Int(size.width){
let color = Color(red: data[byteIndex], green: data[byteIndex + 1], blue: data[byteIndex + 2])
colorMap.colors.insert(color)
byteIndex += 4
}
}
return colorMap
}
}
ColorMap
struct Color : Hashable {
let red: UInt8
let green: UInt8
let blue: UInt8
var hashValue: Int {
return Int(red) + Int(green) + Int(blue)
}
public static func == (lhs: Color, rhs: Color) -> Bool {
return [lhs.red, lhs.green, lhs.blue] == [rhs.red, rhs.green, rhs.blue]
}
}
struct ColorMap {
var colors = Set<Color>()
var exported: Data {
let data = Array(colors)
.map { [$0.red, $0.green, $0.blue] }
.joined()
return Data(bytes: Array(data))
}
}
Leider ist das nicht hilfreich. Das Problem ist, wenn größere Gifs erstellt werden, gehen die Farben nach meinen Originalen verloren. Das Hinzufügen von Farbzuordnungen behebt dieses Problem, funktioniert jedoch nicht mehr mit iOS 11. Diese Antwort wird nicht behandelt. Ich suche nach einer Antwort, um das Problem der fehlenden Farben in iOS 11 zu beheben. –
ist jetzt ein bisschen sauberer. Ich habe den ursprünglichen Beitrag nicht gelesen, tut mir leid. Also das Hauptziel ist es, Gifs zu zoomen, habe ich recht? (eine pro 4 Tasten in Probe ...) – ingconti
Die Probe skaliert sie nicht Zooms.Das Problem ist, wenn beim Speichern von größeren Gifs Farben fehlen. –