MetadataManager
in package
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
$exiftoolPath
private
string|null
$exiftoolPath
$hasImagick
private
bool
$hasImagick
$logger
private
LoggerInterface|null
$logger
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
booladdXmpTag()
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
boolbackupFile()
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|nullcountMetadataKeys()
public
countMetadataKeys(string $filepath) : int
Parameters
- $filepath : string
Return values
intexportMetadataJson()
public
exportMetadataJson(string $inputFile) : string|null
Parameters
- $inputFile : string
Return values
string|nullgetAllMetadata()
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
boolisExiftoolAvailable()
public
isExiftoolAvailable() : bool
Return values
boolisImagickAvailable()
public
isImagickAvailable() : bool
Return values
boolreadExif()
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
boolstripAllMetadata()
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
boolescapeShellArg()
private
escapeShellArg(string $s) : string
Parameters
- $s : string
Return values
stringflattenArrayWithPrefix()
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
stringlocateExiftool()
private
locateExiftool() : string|null
Return values
string|nullpackApp1Xmp()
private
packApp1Xmp(string $xmp) : string
Parameters
- $xmp : string
Return values
stringrecursiveCount()
private
recursiveCount(array<string|int, mixed> $arr) : int
Parameters
- $arr : array<string|int, mixed>