Documentation

MetadataManager
in package

FinalYes

MetadataManager

  • Read EXIF / IPTC / XMP from images (JPEG, PNG).
  • Strip all metadata (Imagick preferred, GD fallback).
  • Remove sensitive/tracking metadata (uses exiftool if available; otherwise strips all).
  • Add basic IPTC tags (JPEG), add simple XMP packet to JPEG (best-effort).
  • Export/import metadata as JSON (import requires exiftool for fidelity).

Table of Contents

Properties

$exiftoolPath  : string|null
$hasImagick  : bool
$logger  : LoggerInterface|null

Methods

__construct()  : mixed
addIptcTags()  : bool
Add IPTC tags to JPEG using iptcembed (PHP native approach).
addXmpTag()  : bool
Inject a simple XMP packet into JPEG (if missing). Best-effort: not a full XMP editor.
backupFile()  : string|null
Backup file to specified dir or same dir with .bak extension
countMetadataKeys()  : int
exportMetadataJson()  : string|null
getAllMetadata()  : array<string|int, mixed>
Get all metadata combined.
importMetadataJson()  : bool
Import metadata from JSON into file.
isExiftoolAvailable()  : bool
isImagickAvailable()  : bool
readExif()  : array<string|int, mixed>
Read EXIF using PHP exif functions (works for files).
readIptc()  : array<string|int, mixed>
Read IPTC via getimagesize and iptcparse (JPEG only).
readXmp()  : array<string|int, mixed>
Read XMP packet (best-effort).
removeSensitiveMetadata()  : bool
Remove sensitive metadata used for identification/tracking.
stripAllMetadata()  : bool
Strip ALL metadata (EXIF/IPTC/XMP). Preferred method: Imagick::stripImage() If Imagick not available: re-save image via GD (JPEG/PNG) which drops metadata.
escapeShellArg()  : string
flattenArrayWithPrefix()  : array<string|int, mixed>
iptcMakeTag()  : string
locateExiftool()  : string|null
packApp1Xmp()  : string
recursiveCount()  : int

Properties

Methods

__construct()

public __construct([LoggerInterface|null $logger = null ]) : mixed
Parameters
$logger : LoggerInterface|null = null

addIptcTags()

Add IPTC tags to JPEG using iptcembed (PHP native approach).

public addIptcTags(string $inputJpeg, array<string|int, mixed> $iptc[, string|null $output = null ]) : bool

$iptc is assoc like ['2#005' => 'Byline', '2#025' => 'Keywords'] OR friendly keys -> we will map common names.

NOTE: IPTC embedding works for JPEG only.

Parameters
$inputJpeg : string
$iptc : array<string|int, mixed>
$output : string|null = null
Return values
bool

addXmpTag()

Inject a simple XMP packet into JPEG (if missing). Best-effort: not a full XMP editor.

public addXmpTag(string $inputJpeg, string $tagName, string $tagValue[, string|null $output = null ]) : bool

Works only for JPEG files.

Parameters
$inputJpeg : string
$tagName : string
$tagValue : string
$output : string|null = null
Return values
bool

backupFile()

Backup file to specified dir or same dir with .bak extension

public backupFile(string $file[, string|null $destDir = null ]) : string|null
Parameters
$file : string
$destDir : string|null = null
Return values
string|null

countMetadataKeys()

public countMetadataKeys(string $filepath) : int
Parameters
$filepath : string
Return values
int

exportMetadataJson()

public exportMetadataJson(string $inputFile) : string|null
Parameters
$inputFile : string
Return values
string|null

getAllMetadata()

Get all metadata combined.

public getAllMetadata(string $filepath) : array<string|int, mixed>
Parameters
$filepath : string
Return values
array<string|int, mixed>

importMetadataJson()

Import metadata from JSON into file.

public importMetadataJson(string $inputFile, string $json[, string|null $output = null ]) : bool

This requires exiftool for faithful import. If exiftool not available returns false.

Parameters
$inputFile : string
$json : string
$output : string|null = null
Return values
bool

isExiftoolAvailable()

public isExiftoolAvailable() : bool
Return values
bool

isImagickAvailable()

public isImagickAvailable() : bool
Return values
bool

readExif()

Read EXIF using PHP exif functions (works for files).

public readExif(string $filepath) : array<string|int, mixed>

Returns associative array or empty array on failure.

Parameters
$filepath : string
Return values
array<string|int, mixed>

readIptc()

Read IPTC via getimagesize and iptcparse (JPEG only).

public readIptc(string $filepath) : array<string|int, mixed>
Parameters
$filepath : string
Return values
array<string|int, mixed>

readXmp()

Read XMP packet (best-effort).

public readXmp(string $filepath) : array<string|int, mixed>

Returns associative array parsed from XMP RDF if available.

Parameters
$filepath : string
Return values
array<string|int, mixed>

removeSensitiveMetadata()

Remove sensitive metadata used for identification/tracking.

public removeSensitiveMetadata(string $input[, string|null $output = null ][, array<string|int, mixed>|null $additionalTags = null ]) : bool

If exiftool is available we call it to delete specific tags: (GPS, serials, unique ids, maker notes, artist, creator, device identifiers, xmpMM DocumentID, etc). If exiftool not available we fall back to stripping all metadata (safe).

Parameters
$input : string

source file

$output : string|null = null

destination (if null overwrite input; a backup will be created)

$additionalTags : array<string|int, mixed>|null = null

optional list of additional tags to remove (exiftool tag names)

Return values
bool

stripAllMetadata()

Strip ALL metadata (EXIF/IPTC/XMP). Preferred method: Imagick::stripImage() If Imagick not available: re-save image via GD (JPEG/PNG) which drops metadata.

public stripAllMetadata(string $input[, string|null $output = null ][, bool $createBackup = false ]) : bool
Parameters
$input : string
$output : string|null = null

If null will overwrite input (safe: create backup first)

$createBackup : bool = false

create .bak copy before overwriting

Return values
bool

escapeShellArg()

private escapeShellArg(string $s) : string
Parameters
$s : string
Return values
string

flattenArrayWithPrefix()

private flattenArrayWithPrefix(array<string|int, mixed> $arr, string $prefix[, string $parentKey = '' ]) : array<string|int, mixed>
Parameters
$arr : array<string|int, mixed>
$prefix : string
$parentKey : string = ''
Return values
array<string|int, mixed>

iptcMakeTag()

private iptcMakeTag(int $rec, int $dat, string $value) : string
Parameters
$rec : int
$dat : int
$value : string
Return values
string

locateExiftool()

private locateExiftool() : string|null
Return values
string|null

packApp1Xmp()

private packApp1Xmp(string $xmp) : string
Parameters
$xmp : string
Return values
string

recursiveCount()

private recursiveCount(array<string|int, mixed> $arr) : int
Parameters
$arr : array<string|int, mixed>
Return values
int
On this page

Search results