如何使用php将数据存储在图像中? - php

我尝试使用imagick库创建两个这样的函数:

function storeCoordinatesImage($img_path, $coordinates){
    $im = new imagick($img_path);
    $im->setImageProperty("coords", $coordinates);
    $im->writeImage($img_path);
}

function getCoordinatesImage($img_path){
    $im = new imagick($img_path);
    return $im->getImageProperty("coords");
}

如果我运行:

if(!storeCoordinatesImage("I.jpg", "hi")) echo "fal";
echo getCoordinatesImage("I.jpg");

什么也没有返回。

但是如果我运行:

$im = new imagick($img_path);
$im->setImageProperty("coords", "hello");
echo $im->getImageProperty("coords");

它返回“你好”。

因此,写入图像一定有问题吗?尽管这些函数均未返回false。 (即它们都在工作)

参考方案

使用图像的配置文件有效负载存储任意数据。尽管存储在图像注释(即JPG_COM)标签中的JSON有效负载似乎很简单,但针对此提议存在着几种竞争技术。最受欢迎的是exif,但我建议xmp。

可扩展元数据平台

在我看来,xmp似乎经过了精心设计,但确实提供了一个平台,可确保通过XML名称空间将所有供应商专有信息分开。

Wikipedia有一个great overview,而Adobe的白皮书(pdf)很好地概述了供卖方实施的“不可行”。

ImageMagick不处理读/写配置文件有效负载之外的任何内容,因此您将负责实现XML管理器。

例如...

// A minimal XMP tempalte
$XMP_BASE='<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="XMPTk 2.8">'
         .'<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"></rdf:RDF>'
         .'</x:xmpmeta>';

$xmp = new DOMDocument();
$xmp->loadXML($XMP_BASE);
// Create a <rdf:Descriptiom> & <Coords> DOM element.
foreach($xmp->getElementsByTagName('RDF') as $node) {
    $coords = $xmp->createElement('Coords', 'hello');
    $description = $xmp->createElement('rdf:Description');
    $description->setAttribute('about', '');
    $description->appendChild($coords);
    $node->appendChild($description);
}

$img = new Imagick('rose:');
// Write profile to image.
$img->setImageProfile('xmp', $xmp->saveXML());
$img->writeImage('output.jpg');
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$img2 = new Imagick('output.jpg');
$xmp2 = new DOMDocument();
// Read profile from image.
$xmp2->loadXML($img2->getImageProfile('xmp'));
// Grab `Coords' value
foreach($xmp2->getElementsByTagName('Coords') as $coords) {
    print $coords->textContent . PHP_EOL;
}
//=> "hello"

您可以使用identify实用程序进行验证。

identify -verbose output.jpg | grep Coords
#=> Coords: hello

当然,如果图像已经包含XMP配置文件,并且您不希望覆盖现有数据,则还需要实现XML DOM“合并”方法。

验证IBAN PHP - php

在设计新平台时,我们尝试集成IBAN编号。我们必须确保IBAN已经过验证,并且存储在数据库中的IBAN始终正确。那么验证数字的正确方法是什么? 参考方案 正如我在其他问题中解释的逻辑一样,我尝试自己创建一个函数。根据Wikipedia文章中解释的逻辑,在下面找到合适的功能。国家特定验证。它适合吗http://en.wikipedia.org/wiki/Int…

PHP:将数组值加在一起 - php

我相信这比标题听起来要难一些,但我可能完全错了。我有一个像这样的数组:[["londrina",15],["cascavel",34],["londrina",23],['tiradentes',34],['tiradentes',21]] 我希望能够采用通用…

在xpath中选择多个条件 - php

我正在尝试使用来自高尔夫比赛的xml提要,以显示每个高尔夫球手在高尔夫球场上的位置。目前,我想展示符合两个条件的所有高尔夫球手(排在前25名,以及所有加拿大高尔夫球手)。这是xml提要的示例。<GolfDataFeed Type="Leaderboards" Timestamp="3/21/2012 9:18:09 PM&…

PHP JQuery复选框 - php

我有以下片段。 var myData = { video: $("input[name='video[]']:checked").serialize(), sinopse: $("#sinopse").val(), dia: $("#dia").val(), quem: $(&#…

PHP:对数组排序 - php

请如何排序以下数组Array ( 'ben' => 1.0, 'ken' => 2.0, 'sam' => 1.5 ) 至Array ( 'ken' => 2.0, 'sam' => 1.5, 'ben' =&…