| 761 | } |
| 762 | |
| 763 | LoaderXmpJpeg::LoaderXmpJpeg(PreviewId id, const Image& image, int parIdx) : Loader(id, image) { |
| 764 | (void)parIdx; |
| 765 | |
| 766 | const XmpData& xmpData = image_.xmpData(); |
| 767 | |
| 768 | std::string prefix = "xmpGImg"; |
| 769 | if (xmpData.findKey(XmpKey("Xmp.xmp.Thumbnails[1]/xapGImg:image")) != xmpData.end()) { |
| 770 | prefix = "xapGImg"; |
| 771 | } |
| 772 | |
| 773 | auto imageDatum = xmpData.findKey(XmpKey("Xmp.xmp.Thumbnails[1]/" + prefix + ":image")); |
| 774 | if (imageDatum == xmpData.end()) |
| 775 | return; |
| 776 | auto formatDatum = xmpData.findKey(XmpKey("Xmp.xmp.Thumbnails[1]/" + prefix + ":format")); |
| 777 | if (formatDatum == xmpData.end()) |
| 778 | return; |
| 779 | auto widthDatum = xmpData.findKey(XmpKey("Xmp.xmp.Thumbnails[1]/" + prefix + ":width")); |
| 780 | if (widthDatum == xmpData.end()) |
| 781 | return; |
| 782 | auto heightDatum = xmpData.findKey(XmpKey("Xmp.xmp.Thumbnails[1]/" + prefix + ":height")); |
| 783 | if (heightDatum == xmpData.end()) |
| 784 | return; |
| 785 | |
| 786 | if (formatDatum->toString() != "JPEG") |
| 787 | return; |
| 788 | |
| 789 | width_ = widthDatum->toUint32(); |
| 790 | height_ = heightDatum->toUint32(); |
| 791 | preview_ = decodeBase64(imageDatum->toString()); |
| 792 | size_ = preview_.size(); |
| 793 | valid_ = true; |
| 794 | } |
| 795 | |
| 796 | Loader::UniquePtr createLoaderXmpJpeg(PreviewId id, const Image& image, int parIdx) { |
| 797 | return std::make_unique<LoaderXmpJpeg>(id, image, parIdx); |