मेटाडेटा API
Sharp समृद्ध मेटाडेटा ऑपरेशन कार्यक्षमता प्रदान करता है, जो छवि मेटाडेटा जानकारी को पढ़ने, संशोधित करने और लिखने में सक्षम है।
मेटाडेटा पढ़ना
मूल उपयोग
javascript
import sharp from 'sharp';
// छवि मेटाडेटा पढ़ें
const metadata = await sharp('input.jpg').metadata();
console.log(metadata);मेटाडेटा वस्तु संरचना
javascript
{
format: 'jpeg', // छवि प्रारूप
width: 1920, // चौड़ाई
height: 1080, // ऊंचाई
space: 'srgb', // रंग स्थान
channels: 3, // चैनल संख्या
depth: 'uchar', // बिट गहराई
density: 72, // रिज़ॉल्यूशन
hasProfile: false, // रंग प्रोफ़ाइल है या नहीं
hasAlpha: false, // पारदर्शिता चैनल है या नहीं
isOpaque: true, // अपारदर्शी है या नहीं
orientation: 1, // EXIF दिशा
exif: { ... }, // EXIF डेटा
icc: { ... }, // ICC प्रोफ़ाइल
iptc: { ... }, // IPTC डेटा
xmp: { ... }, // XMP डेटा
tifftagPhotoshop: { ... } // Photoshop TIFF टैग
}EXIF डेटा
EXIF पढ़ना
javascript
const metadata = await sharp('input.jpg').metadata();
if (metadata.exif) {
console.log('EXIF डेटा:', metadata.exif);
// EXIF डेटा पार्स करें
const exif = sharp.exif(metadata.exif);
console.log('शूटिंग समय:', exif.DateTime);
console.log('कैमरा मॉडल:', exif.Model);
console.log('ISO:', exif.ISOSpeedRatings);
}EXIF लिखना
javascript
// EXIF डेटा बनाएं
const exif = sharp.exif({
IFD0: {
ImageDescription: 'Sharp द्वारा संसाधित छवि',
Copyright: '© 2024'
},
IFD1: {
Orientation: 1
},
EXIF: {
DateTimeOriginal: new Date().toISOString(),
UserComment: 'Sharp का उपयोग करके संसाधित'
}
});
// EXIF डेटा लिखें
await sharp('input.jpg')
.withMetadata({ exif })
.jpeg()
.toFile('output.jpg');ICC रंग प्रोफ़ाइल
ICC प्रोफ़ाइल पढ़ना
javascript
const metadata = await sharp('input.jpg').metadata();
if (metadata.icc) {
console.log('ICC प्रोफ़ाइल:', metadata.icc);
}ICC प्रोफ़ाइल एम्बेड करना
javascript
// sRGB प्रोफ़ाइल एम्बेड करें
await sharp('input.jpg')
.withMetadata({ icc: 'srgb' })
.jpeg()
.toFile('output.jpg');
// कस्टम ICC प्रोफ़ाइल एम्बेड करें
const iccProfile = fs.readFileSync('custom.icc');
await sharp('input.jpg')
.withMetadata({ icc: iccProfile })
.jpeg()
.toFile('output.jpg');IPTC डेटा
IPTC पढ़ना
javascript
const metadata = await sharp('input.jpg').metadata();
if (metadata.iptc) {
console.log('IPTC डेटा:', metadata.iptc);
}IPTC लिखना
javascript
const iptc = {
'2:05': 'Object Name',
'2:15': 'Category',
'2:25': 'Keywords',
'2:55': 'Date Created',
'2:80': 'By-line',
'2:116': 'Copyright'
};
await sharp('input.jpg')
.withMetadata({ iptc })
.jpeg()
.toFile('output.jpg');XMP डेटा
XMP पढ़ना
javascript
const metadata = await sharp('input.jpg').metadata();
if (metadata.xmp) {
console.log('XMP डेटा:', metadata.xmp);
}XMP लिखना
javascript
const xmp = `
<x:xmpmeta xmlns:x="adobe:ns:meta/">
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rdf:Description rdf:about=""
xmlns:dc="http://purl.org/dc/elements/1.1/">
<dc:title>Sharp द्वारा संसाधित छवि</dc:title>
<dc:creator>Sharp</dc:creator>
</rdf:Description>
</rdf:RDF>
</x:xmpmeta>
`;
await sharp('input.jpg')
.withMetadata({ xmp })
.jpeg()
.toFile('output.jpg');दिशा जानकारी
दिशा पढ़ना
javascript
const metadata = await sharp('input.jpg').metadata();
console.log('छवि दिशा:', metadata.orientation);स्वचालित घुमाना
javascript
// EXIF दिशा के अनुसार स्वचालित रूप से घुमाएं
await sharp('input.jpg')
.rotate() // स्वचालित घुमाना
.jpeg()
.toFile('output.jpg');रिज़ॉल्यूशन जानकारी
रिज़ॉल्यूशन पढ़ना
javascript
const metadata = await sharp('input.jpg').metadata();
console.log('रिज़ॉल्यूशन:', metadata.density);रिज़ॉल्यूशन सेट करना
javascript
await sharp('input.jpg')
.withMetadata({ density: 300 })
.jpeg()
.toFile('output.jpg');मेटाडेटा बनाए रखना
सभी मेटाडेटा बनाए रखना
javascript
// सभी मौजूदा मेटाडेटा बनाए रखें
await sharp('input.jpg')
.resize(800, 600)
.withMetadata()
.jpeg()
.toFile('output.jpg');चयनात्मक रखरखाव
javascript
// केवल EXIF डेटा बनाए रखें
await sharp('input.jpg')
.resize(800, 600)
.withMetadata({ exif: true })
.jpeg()
.toFile('output.jpg');
// EXIF और ICC बनाए रखें
await sharp('input.jpg')
.resize(800, 600)
.withMetadata({ exif: true, icc: true })
.jpeg()
.toFile('output.jpg');मेटाडेटा हटाना
सभी मेटाडेटा हटाना
javascript
// सभी मेटाडेटा हटाएं
await sharp('input.jpg')
.resize(800, 600)
.jpeg()
.toFile('output.jpg');विशिष्ट मेटाडेटा हटाना
javascript
// EXIF हटाएं लेकिन अन्य बनाए रखें
await sharp('input.jpg')
.resize(800, 600)
.withMetadata({ exif: false })
.jpeg()
.toFile('output.jpg');बैच मेटाडेटा प्रसंस्करण
बैच पढ़ना
javascript
const fs = require('fs').promises;
async function batchReadMetadata(directory) {
const files = await fs.readdir(directory);
const results = [];
for (const file of files) {
if (file.match(/\.(jpg|jpeg|png|webp)$/i)) {
try {
const metadata = await sharp(`${directory}/${file}`).metadata();
results.push({ file, metadata });
} catch (error) {
console.error(`${file} मेटाडेटा पढ़ने में विफल:`, error.message);
}
}
}
return results;
}बैच लिखना
javascript
async function batchWriteMetadata(directory, metadata) {
const files = await fs.readdir(directory);
for (const file of files) {
if (file.match(/\.(jpg|jpeg|png|webp)$/i)) {
try {
await sharp(`${directory}/${file}`)
.withMetadata(metadata)
.toFile(`${directory}/processed_${file}`);
} catch (error) {
console.error(`${file} प्रसंस्करण विफल:`, error.message);
}
}
}
}मेटाडेटा सत्यापन
मेटाडेटा अखंडता सत्यापन
javascript
async function validateMetadata(filePath) {
try {
const metadata = await sharp(filePath).metadata();
// मूल गुण जांचें
if (!metadata.width || !metadata.height) {
throw new Error('आकार जानकारी गायब है');
}
// प्रारूप जांचें
if (!metadata.format) {
throw new Error('प्रारूप जानकारी गायब है');
}
// चैनल संख्या जांचें
if (!metadata.channels) {
throw new Error('चैनल जानकारी गायब है');
}
return {
valid: true,
metadata
};
} catch (error) {
return {
valid: false,
error: error.message
};
}
}प्रदर्शन अनुकूलन
केवल आवश्यक मेटाडेटा पढ़ना
javascript
// केवल मूल जानकारी पढ़ें, EXIF पार्स न करें
const metadata = await sharp('input.jpg')
.metadata({ pages: -1 });
// केवल EXIF पढ़ें
const metadata = await sharp('input.jpg')
.metadata({ exif: true });स्ट्रीम प्रसंस्करण
javascript
const fs = require('fs');
// स्ट्रीम से मेटाडेटा पढ़ें
const stream = fs.createReadStream('input.jpg');
const metadata = await sharp(stream).metadata();त्रुटि प्रबंधन
javascript
try {
const metadata = await sharp('input.jpg').metadata();
console.log('मेटाडेटा:', metadata);
} catch (error) {
if (error.code === 'VipsForeignLoad') {
console.error('असमर्थित छवि प्रारूप');
} else if (error.code === 'VipsForeignLoadLimit') {
console.error('छवि बहुत बड़ी है');
} else {
console.error('मेटाडेटा पढ़ने में विफल:', error.message);
}
}