মেটাডেটা 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);
}
}