2017-04-18 21 views
19

画像ファイルのヘッダにコメントを追加したいと思います。 UserCommentの下でEXIFメタデータにコメントを追加することができましたが、画像ファイルのヘッダーに複数のコメントを追加したいと思います。画像ファイルのヘッダにコメントを追加

私はどのフレームワークを使用しますか? UserCommentについては、ImageIOフレームワークを使用しています。

+1

だけUSERCOMMENTプロパティを使用する必要があるはい、あなたが追加することができます{{"comment1": "yourcomment"、 "comment2": "yourcomment"} ' – iphonic

+0

@iphonicのような文字列ではなく、プロパティに辞書を追加しました。これにより、EXIFタイプのメタデータにコメントが追加されますが、メタデータのファイルタイプに追加する必要があります。このリンクをお読みくださいhttp://s000.tinyupload.com/?file_id=00209075531742860207 –

+1

これを試しましたか? 'let url = URL(fileURLWithPath:" myfile.jpg ") var resourceValues = URLResourceValues() // TODO:いくつかの値をresourceValuesに設定してください url.setResourceValues(resourceValues) ' – Ramis

答えて

2

SwiftのJPEG画像にコメント(例:ではなくとEXIF UserComment)を追加する方法は次のとおりです。私はそれがImageIOフレームワークを使って行うことはできないと思います。

コードは、wrjpgcomコマンドラインツールのC言語で書かれています。これはlibjpegライブラリの一部です。より詳しいコメントについては、source codeをチェックしてください(実際にはlibjpegは使用されません)。

SOFnの直前に新しいコメントマーカーを挿入します。これ(a)は、新しいコメントを既存のコメントではなく、後に表示します。 (b)は、JFIF仕様で要求されているとおり、コメントがJFIFまたはJFXXマーカーの後に来るようにします。

import Foundation 

func addJPEGComment(to jpegData: inout Data, _ comment: String) { 

    // find index of first SOF marker, or EOI 
    let sofMarkers: [UInt8] = [ 
     0xC0, 0xC1, 0xC2, 0xC3, 0xC5, 0xC6, 
     0xC7, 0xC9, 0xCA, 0xCB, 0xCD, 0xCE, 
     0xCF, 0xD9 // EOI 
    ] 

    var firstSOFRange: Range<Data.Index>? 
    for marker in sofMarkers { 
     if let range = jpegData.range(of: Data(bytes: [ 0xFF, marker ])) { 
      firstSOFRange = range 
      break 
     } 
    } 

    guard let firstSOFIndex = firstSOFRange?.lowerBound 
     else { fatalError("No SOF or EOI marker found.") } 

    // create comment byte array 
    let length = comment.lengthOfBytes(using: .utf8) + 2 
    let l1 = UInt8((length >> 8) & 0xFF) 
    let l2 = UInt8(length & 0xFF) 
    let commentArray = [ 0xFF, 0xFE /* COM marker */, l1, l2 ] + [UInt8](comment.utf8) 

    // insert comment array into image data object 
    jpegData.insert(contentsOf: commentArray, at: firstSOFIndex) 
} 

guard let jpegURL = Bundle.main.url(forResource: "no_com", withExtension: "jpg") 
    else { fatalError("File not found.") } 

guard var jpegData = try? Data(contentsOf: jpegURL) 
    else { fatalError("File could not be read.") } 

addJPEGComment(to: &jpegData, "This is a JPEG comment.") 

guard let jpegOutputURL = try? FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false).appendingPathComponent("with_com.jpg") 
    else { fatalError("Destination URL not created") } 

try jpegData.write(to: jpegOutputURL) 

print(jpegOutputURL) 

出力JPEGがthisウェブサイトにアップロードされたとき(Gist

コメントが表示されます。

enter image description here

+0

ありがとうございました。それは私の側面として働いています。 –

関連する問題