繁体   English   中英

我如何理解URL中的图像是否已更改?

[英]How can I understand if Image from URL has been changed?

因此,我得到了很多图像URL,并将它们处理到我的Blob存储中,并将其映射到CDN。 现在的问题是,有时图像会以原始网址进行更新,但网址没有更改。 例如:

对于第一张图片:

Original ImageUrl: "<websiteUrl>/image1.jpg";
My BlobUrl: "<bloburl>/myimage1.jpg";
My CDN Url: "<cdnurl>/myimage1.jpg

对于更新图像:

原始图片网址相同,因此我无法检查图片网址是否已更新。 我以为我可以检查exif datetime属性,但是不幸的是,这些图像在exif中没有datetime属性。 我在exif中只有的信息是:

File Size 236 kB 
File Type JPEG 
MIME Type image/jpeg 
Image Width 1000 
Image Height 1500 
Encoding Process Baseline DCT, Huffman coding
Bits Per Sample 8 
Color Components 3
X Resolution 72 
Y Resolution72 
YCbCr Sub Sampling YCbCr4:2:0 (2 2)

我的问题是,在这种情况下,如何检测来自url的图像是否与我的blob中的图像不同。

在第一种情况下,您应该检查文件本身的LastModified日期,这将告诉您自上次访问文件以来文件是否实际上已更改。 然后,如果文件比您存储的日期新,则只需重新加载它即可。 您还可以检查文件的大小(如果它与几乎可以肯定的更改之前的大小不同)。

但是,如果您无法获得该信息,则唯一的方法是比较图像的像素以查看它们是否不同。

但是,您不必进行逐像素比较。 如果您在第一次加载图像时从图像中生成校验和,并将其与URL一起存储在数据库中。 然后,当您下次需要显示图像并将存储的校验和与新计算的校验和进行比较时,可以重复该过程。 如果它们不同,则图像也不同。

这确实意味着,无论是否更改了图像,您都必须每次检索图像。

您应该为文件创建一个校验和并将其存储在其中。 然后,您可以轻松地计算新的校验和以查看其是否已更改:

using (var md5 = MD5.Create())
{
    using (var stream = File.OpenRead(filename))
    {
        return md5.ComputeHash(stream);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM