ycs77/image-metadata

图像元数据库。支持全景图像。

v0.2.1 2024-06-12 07:37 UTC

This package is auto-updated.

Last update: 2024-09-12 08:05:53 UTC


README

Latest Version on Packagist Total Downloads Software License

改编自 dchesterton/image。支持全景图像。

图像元数据库。支持全景图像。

警告:此库为预_alpha版本,其中大部分内容仍处于开发中或根本无法使用。请自行承担风险。

支持的图像类型

  • JPEG
  • PNG
  • GIF
  • PDF
  • SVG
  • WEBP
  • TIFF
  • DNG
  • 原始格式 - CR2, NEF, 等。

支持的图像元数据类型

  • XMP
  • IPTC
  • EXIF

获取元数据

$image = Image::fromFile($filename);

$headline = $image->getXmp()->getHeadline();
$camera = $image->getExif()->getCamera();
...

修改现有元数据

$image = Image::fromFile($filename);

$xmp = $image->getXmp();
$xmp->setHeadline('A test headline');
$xmp->setCaption('Caption');

$image->getIptc()->setCategory('Category');

$image->save();

独立XMP

生成独立XMP

$xmp = new Xmp;
$xmp->setHeadline('A headline')
...

$data = $xmp->getXml();

修改独立XMP

$xmp = new Xmp($data); // or Xmp::fromFile($filename)
$xmp->setHeadline('A headline');

$data = $xmp->getXml();

设置/替换图像中的XMP

$xmp = new Xmp;
$xmp->setHeadline('A headline');
...

$image = Image::fromFile($filename);
$image->setXmp($xmp);

$image->save() // or $image->getBytes()

加载特定图像类型

当文件类型已知时,您可以直接使用文件类型的fromFile方法加载文件类型。

$jpeg = JPEG::fromFile('image.jpg');
$png = PNG::fromFile('image.png');

从字节实例化

如果您没有文件可处理,但您有一个存储在字符串中的图像(来自数据库、ImageMagick等),您可以轻松地从字符串实例化一个对象。

$data = ...

$jpeg = JPEG::fromString($data);
$jpeg->getXmp()->setHeadline('Test headline');

$jpeg->save('out.jpg'); // or $jpeg->getBytes();

从GD或流实例化

您还可以从GD资源或流创建一个对象。

$gd = imagecreate(100, 100);
$jpeg = JPEG::fromResource($gd);
$stream = fopen('...', 'r+');
$jpeg = JPEG::fromStream($stream);

聚合元数据

当只需要一部分元数据,而不关心它来自XMP、IPTC还是EXIF时,您可以使用聚合元数据对象。

$image = Image::fromFile($filename);
$headline = $image->getAggregate()->getHeadline();

默认情况下,它首先检查XMP,然后是IPTC,然后是EXIF,但您可以更改优先级

$aggregate = $image->getAggregate();
$aggregate->setPriority(['exif', 'iptc', 'xmp']);

$aggregate->getHeadline(); // will now check EXIF first, then IPTC, then XMP

您还可以排除不希望使用的元数据类型

$aggregate->setPriority(['iptc', 'xmp']);
$aggregate->getHeadline(); // will only check IPTC and XMP

您还可以在聚合级别修改元数据

$image = Image::fromFile($filename);
$image->getAggregate()->setHeadline('Headline');

$image->save();

这将同时在XMP和IPTC中设置标题。为了与其他软件的最大兼容性,建议在可用时使用聚合元数据对象。

获取GPS数据

$image = ...
$gps = $image->getAggregateMeta()->getGPS(); // checks EXIF and XMP
// or $gps = $image->getExif()->getGPS();

$lat = $gps->getLatitude();

设置全景图像XMP元数据

use Ycs77\ImageMetadata\Image;
use Ycs77\ImageMetadata\Metadata\Panorama\GPano;

$image = Image::fromFile($filename);
$image->getXmp()->setPanorama(function (GPano $gPano) {
    return $gPano
        ->projectionType()
        ->usePanoramaViewer(true)
        ->croppedAreaImageWidthPixels(8192)
        ->croppedAreaImageHeightPixels(4096)
        ->fullPanoWidthPixels(8192)
        ->fullPanoHeightPixels(4096)
        ->croppedAreaLeftPixels(0)
        ->croppedAreaTopPixels(0)
        ->stitchingSoftware('Your App Name');
});
$image->save();

更多GPano元数据请参阅Photo Sphere XMP元数据