दोनों को मेटाडेटा लिखें, मुझे अपलोड की गई छवियों में मेटाडेटा टैग (विवरण) जोड़ने की आवश्यकता है।दोनों jpg और png
मुझे यह जवाब मिला है: https://stackoverflow.com/a/1764913/6776 जो जेपीजी फाइलों के लिए बहुत अच्छा काम करता है, लेकिन पीएनजी के लिए नहीं।
private string Tag = "test meta data";
private static Stream TagImage(Stream input, string type)
{
bool isJpg = type.EndsWith("jpg", StringComparison.InvariantCultureIgnoreCase) || type.EndsWith("jpeg", StringComparison.InvariantCultureIgnoreCase);
bool isPng = type.EndsWith("png", StringComparison.InvariantCultureIgnoreCase);
BitmapDecoder decoder = null;
if (isJpg)
{
decoder = new JpegBitmapDecoder(input, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
}
else if (isPng)
{
decoder = new PngBitmapDecoder(input, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
}
else
{
return input;
}
// modify the metadata
BitmapFrame bitmapFrame = decoder.Frames[0];
BitmapMetadata metaData = (BitmapMetadata)bitmapFrame.Metadata.Clone();
metaData.Subject = Tag;
metaData.Comment = Tag;
metaData.Title = Tag;
// get an encoder to create a new jpg file with the new metadata.
BitmapEncoder encoder = null;
if (isJpg)
{
encoder = new JpegBitmapEncoder();
}
else if (isPng)
{
encoder = new PngBitmapEncoder();
}
encoder.Frames.Add(BitmapFrame.Create(bitmapFrame, bitmapFrame.Thumbnail, metaData, bitmapFrame.ColorContexts));
// Save the new image
Stream output = new MemoryStream();
encoder.Save(output);
output.Seek(0, SeekOrigin.Begin);
return output;
}
यह जब मैं एक jpg अपलोड अच्छा काम करता है, लेकिन एक png साथ, metaData.Subject = Tag
लाइन में, यह एक System.NotSupportedException
फेंकता है (इस कोडेक निर्दिष्ट संपत्ति का समर्थन नहीं करता)।
अद्यतन
ऐसा लगता है मैं एक अलग तरीके छवि प्रारूप के आधार पर उपयोग करने के लिए:
if (isJpg)
{
metaData.SetQuery("/app1/ifd/exif:{uint=270}", Tag);
}
else
{
metaData.SetQuery("/tEXt/{str=Description}", Tag);
}
पर the available formats' queries आधार पर पहले दोनों प्रारूपों के लिए काम करना चाहिए। दूसरा वास्तव में काम नहीं करता है (यह छवि में मेटाडेटा बनाता है लेकिन इसका मूल्य नहीं बचाता है)।
यदि मैं encoder.Save
लाइन पर पीएनजी के लिए पहली विधि (/app1/ifd/exif
) का उपयोग करने का प्रयास करता हूं, तो मुझे कोई अपवाद नहीं है, "कोई इमेजिंग घटक उपयुक्त नहीं है"।
अपने प्रश्न के लिए प्रासंगिक नहीं है, लेकिन मुझे लगता है कि आपके isJpg = कथन में कोई गलती है। मुझे लगता है कि आप ".jpg" या ".jpeg" के लिए परीक्षण करना चाहते हैं, लेकिन आप दो बार ".jpg" के लिए परीक्षण करते हैं। – RenniePet
हां तब से कोड में तय किया गया है, लेकिन सवाल में नहीं। धन्यवाद! – thomasb