Gifを作成するときに最近、問題が発生していました。しかしSOの助けを借りれば、誰かが私の仕事を見つけて自分のカラーマップを作成するのを手助けすることができました。これは私が変更され、ドキュメントに何かを見つけることができないと、このもはや仕事になるだろうiOSの11まで素晴らしい仕事iOS Colors Incorrect When Saving Animated GifiOS 11でGIF画像カラーマップを作成する
ここに前の問題...。 kCGImagePropertyGIFImageColorMap
gifが生成されていますが、以前の問題のようにgifが大きくなった場合に色が欠落するというオリジナルの問題があります。これは、この問題を解決するために追加されたので意味があります。ここで
疑い号...
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: "")!
}
は、テストプロジェクトをダウンロードするためのリンクです。 10.3シミュレータで実行するとうまくいきますが、iOS 11で実行すると白い画像になります。
https://www.dropbox.com/s/hdmkwyz47ondd52/gifTest2.zip?dl=0
参照されているその他のコード...
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))
}
}
残念ながら、これは役に立ちません。問題は、より大きなGIFを作成するときに私のオリジナルのSOの質問にリンクされている色が行方不明になることです。カラーマップを追加するとこの問題は修正されますが、iOS 11では機能しなくなりました。私はiOS 11の色の欠如の問題を解決するための答えを探しています。 –
は今や少しきれいです。私は元の投稿を読んでいない、申し訳ありません。 メインターゲットはGIFをズームすることです。そうですか? (サンプル中の4つのボタンにつき...) – ingconti
サンプルはそれらを拡大しないで拡大します。問題は、大きなGIFの色を保存していない場合です。 –