Gần đây, tôi đã gặp sự cố khi tạo Gif nếu thiếu màu quá lớn. Tuy nhiên nhờ sự giúp đỡ của SO, ai đó đã có thể giúp tôi tìm một công việc xung quanh và tạo ra bản đồ màu của riêng tôi.Tạo Bản đồ Màu Hình ảnh Gif trong iOS 11
Câu hỏi trước đây ... iOS Colors Incorrect When Saving Animated Gif
này làm việc rất lớn lên cho đến khi iOS 11. Tôi không thể tìm thấy bất cứ điều gì trong tài liệu mà thay đổi và sẽ làm cho không còn hoạt động này. Những gì tôi đã tìm thấy là nếu tôi loại bỏ kCGImagePropertyGIFImageColorMap
Một gif được tạo ra nhưng nó có vấn đề ban đầu, nơi màu sắc bị mất nếu gif được lớn như câu hỏi trước đây của tôi. Điều này có ý nghĩa vì điều này đã được thêm vào để khắc phục sự cố đó.
nghi ngờ Issue ...
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: "")!
}
Dưới đây là một liên kết để tải về một dự án thử nghiệm. Lưu ý nếu bạn chạy nó trên một mô phỏng 10.3 nó hoạt động tuyệt vời nhưng nếu bạn chạy nó trên iOS 11 nó là một hình ảnh màu trắng.
https://www.dropbox.com/s/hdmkwyz47ondd52/gifTest2.zip?dl=0
mã khác được tham chiếu ...
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))
}
}
Rất tiếc, điều này không hữu ích. Vấn đề là khi tạo gifs lớn hơn, màu sắc sẽ bị mất theo bản gốc của tôi SO câu hỏi được liên kết. Thêm bản đồ màu sẽ khắc phục vấn đề này nhưng nó không còn hoạt động với iOS 11. Câu trả lời này không giải quyết bất kỳ vấn đề nào. Tôi đang tìm kiếm một câu trả lời để khắc phục vấn đề thiếu màu trong iOS 11. –
bây giờ là một chút sạch hơn. Tôi đã không đọc bài gốc, xin lỗi. Vì vậy, mục tiêu chính là thu phóng gif, tôi có đúng không? (cho mỗi 4 nút trong mẫu ...) – ingconti
Mẫu chia tỷ lệ chúng thành không Phóng to.Vấn đề là khi lưu các màu gifs lớn hơn bị thiếu. –