منشئ Sharp
Sharp هي مكتبة معالجة صور عالية الأداء لـ Node.js. المنشئ هو نقطة البداية لاستخدام Sharp.
الاستخدام الأساسي
javascript
import sharp from 'sharp';
// إنشاء مثيل Sharp من مسار الملف
const image = sharp('input.jpg');
// إنشاء مثيل Sharp من Buffer
const image = sharp(inputBuffer);
// إنشاء مثيل Sharp من Stream
const image = sharp(inputStream);معاملات المنشئ
مصدر الإدخال
يقبل منشئ Sharp أنواعًا متعددة من مصادر الإدخال:
javascript
// مسار الملف
sharp('input.jpg')
// Buffer
sharp(buffer)
// Stream
sharp(stream)
// URL
sharp('https://example.com/image.jpg')
// مصادر إدخال متعددة
sharp(['input1.jpg', 'input2.jpg'])كائن الخيارات
javascript
sharp(input, {
// خيارات الإدخال
input: {
failOnError: false,
limitInputPixels: 268402689,
sequentialRead: false
},
// خيارات الصفحة (للصور متعددة الصفحات)
pages: -1,
// خيارات البيانات الخام
raw: {
width: 1920,
height: 1080,
channels: 3
}
})خيارات الإدخال
failOnError
- النوع:
boolean - القيمة الافتراضية:
true - الوصف: ما إذا كان يجب رمي استثناء عند مواجهة خطأ
javascript
sharp('input.jpg', { failOnError: false })
.resize(300, 200)
.toFile('output.jpg')
.catch(err => console.log('فشلت المعالجة:', err));limitInputPixels
- النوع:
number - القيمة الافتراضية:
268402689(16384 x 16384) - الوصف: تحديد عدد وحدات البكسل في صورة الإدخال
javascript
sharp('large-image.jpg', {
limitInputPixels: 100000000
})sequentialRead
- النوع:
boolean - القيمة الافتراضية:
false - الوصف: ما إذا كان يجب قراءة بيانات الصورة بشكل تسلسلي
javascript
sharp('input.jpg', { sequentialRead: true })الصور متعددة الصفحات
للصور متعددة الصفحات (مثل TIFF و PDF)، يمكنك تحديد الصفحات المراد معالجتها:
javascript
// معالجة جميع الصفحات
sharp('multi-page.tiff', { pages: -1 })
// معالجة صفحة محددة (تبدأ من 0)
sharp('multi-page.tiff', { pages: 0 })
// معالجة صفحات متعددة
sharp('multi-page.tiff', { pages: [0, 2, 4] })بيانات الصورة الخام
عند معالجة بيانات الصورة الخام، تحتاج إلى تحديد الأبعاد وعدد القنوات:
javascript
sharp(rawBuffer, {
raw: {
width: 1920,
height: 1080,
channels: 3 // RGB
}
})معالجة الأخطاء
javascript
try {
const image = sharp('input.jpg');
await image.toFile('output.jpg');
} catch (error) {
console.error('فشلت معالجة الصورة:', error.message);
}نصائح الأداء
- إعادة استخدام المثيلات: أعد استخدام مثيلات Sharp قدر الإمكان
- المعالجة المتدفقة: للملفات الكبيرة، استخدم المعالجة المتدفقة
- إدارة الذاكرة: حرر المثيلات غير الضرورية في الوقت المناسب
javascript
// ممارسة جيدة
const sharp = require('sharp');
const image = sharp('input.jpg');
// معالجة عمليات متعددة
await image
.resize(300, 200)
.jpeg({ quality: 80 })
.toFile('output1.jpg');
await image
.resize(150, 100)
.png()
.toFile('output2.jpg');