画像ファイルのヘッダーにコメントを追加

ディケンシャー|

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

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

nyg

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

コードはwrjpgcom、Cで記述されコマンドラインツールから取得されます。これは、libjpegライブラリの一部です。詳細なコメントについては、ソースコード確認してください(実際には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がこのWebサイトにアップロードされると、コメントが表示されます。

ここに画像の説明を入力してください

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

すべてのソースファイルに自動ヘッダーコメントを追加する

swiftファイルのヘッダーコメントを変更する方法

IntelliJIDEAで作成した後に現在のファイルヘッダーコメントを生成する方法

Rで作成したPDFファイルのヘッダーに画像(pngファイル)を追加

パンダの.dataファイルにヘッダーを追加します

画像戻りメソッドのコンテンツタイプヘッダーに文字セットを追加するSpringコントローラー

poiを使用して既存の.docxドキュメントに外部ヘッダーフッターファイル(.xml形式)を追加する方法

「コメント」のヘッダーブロックを含むCSVファイルの解析

ヘッダーファイルをCMakeのADD_LIBRARY / ADD_EXECUTABLEコマンドに追加する理由

fastaファイルのヘッダーにテキストを追加する

Wordpressが1つのテンプレートファイルにカスタムHTTPヘッダーを追加

カスタムテンプレートに別のヘッダーファイルを追加したい

テンプレートヘッダーを複数の既存のファイルにコピーする

列テキストファイルから別のファイルにヘッダーを追加する

固定長ファイルとともにヘッダー、フッターを追加するawkコマンド

C ++ :: #include:複数のソースファイルにテンプレートクラスヘッダーファイルを追加しますか?

各ファイルにヘッダー付きのAWKを使用したファイル分割コマンド

vim / cindentを使用してC ++ファイルのコメント付きライセンスヘッダーのインデントを構成する

パンダはcsvファイルのヘッダーの下に空の行を追加しますか?

CでのADT(ヘッダーファイル、ソースファイル、メインファイルを使用)

Eclipseの「新しく生成されたJavaファイル」ごとに標準のコメントヘッダーを自動挿入します

画像ヘッダー情報をテキストファイルに保存する

Pythonでsedコマンドを使用してファイルにヘッダーを追加する方法

.pgm画像ファイルのヘッダーを読み取る

ApacheCamelのヘッダー付きのCSVファイルに追加

Javaのテキストファイルの各ページの先頭にヘッダーを追加する

ファイルヘッダーをチェックするコンジット

マークダウンファイルのYAMLヘッダーは、ドキュメントの上に奇数のテーブルを生成します

コンパイル時にヘッダーファイルを挿入する

TOP 一覧

  1. 1

    モーダルダイアログを自動的に閉じる-サーバーコードが完了したら、Googleスプレッドシートのダイアログを閉じます

  2. 2

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  3. 3

    CSSのみを使用して三角形のアニメーションを作成する方法

  4. 4

    ドロップダウンリストで選択したアイテムのQComboBoxスタイル

  5. 5

    ZScalerと証明書の問題により、Dockerを使用できません

  6. 6

    PyCharmリモートインタープリターはプロジェクトタブにサイトパッケージのコンテンツを表示しません

  7. 7

    Windows 10でのUSB入力デバイスの挿入/取り外しの検出

  8. 8

    Excel - count multiple words per cell in a range of cells

  9. 9

    PictureBoxで画像のブレンドを無効にする

  10. 10

    Windows 10 Pro 1709を1803、1809、または1903に更新しますか?

  11. 11

    スタート画面にシャットダウンタイルを追加するにはどうすればよいですか?

  12. 12

    Python / SciPyのピーク検出アルゴリズム

  13. 13

    Luaの文字列から特定の特殊文字を削除するにはどうすればよいですか?

  14. 14

    Pythonを使用して、リストからデータを読み取り、特定の値をElasticsearchにインデックス付けするにはどうすればよいですか?

  15. 15

    LinuxでPySide2(Qt for Python)をインストールするQt Designerはどこにありますか?

  16. 16

    goormIDEは、ターミナルがロードするデフォルトプロジェクトを変更します

  17. 17

    QGISとPostGIS(マップポイント(米国の地図上にraduisを使用した緯度と経度)

  18. 18

    MLでのデータ前処理の背後にある直感

  19. 19

    ターミナルから「入力ソースの変更」ショートカットを設定する

  20. 20

    パンダは異なる名前の列に追加します

  21. 21

    同じクラスの異なるバージョンを使用したクラスローディング:java.lang.LinkageError:名前の重複クラス定義を試行しました

ホットタグ

アーカイブ