دليل Cropper.js مع أحدث طرق تعديل الصور
تحديث شامل لأفضل الممارسات في استخدام مكتبة Cropper.js مع أحدث الإمكانيات والتقنيات
مميزات الإصدارات الحديثة
تحسينات الأداء
تحسينات كبيرة في سرعة المعالجة وتقليل استخدام الذاكرة بنسبة تصل إلى 40% في الإصدارات الحديثة
دعم اللمس المتقدم
تجربة مستخدم محسنة للأجهزة اللوحية والهواتف مع دعم للإيماءات المتعددة
واجهة قابلة للتخصيص
إمكانية تخصيص كاملة للواجهة باستخدام CSS Variables وأساليب التصميم الحديثة
تحسينات الأمان
حماية ضد هجمات XSS وتحسينات في معالجة ملفات الصور
وظائف جديدة
إضافة ميزات مثل تحديد نسبة القطع التلقائي، وضع المعاينة الذكية، ودعم أفضل لـ WebP و AVIF
تكامل أسهل
دعم محسن لأطر العمل الحديثة مثل React 18، Vue 3، و Svelte
التثبيت والإعداد
<!-- CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.6.1/cropper.min.css">
<!-- JavaScript -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.6.1/cropper.min.js"></script>
مثال عملي متكامل 2024
<!DOCTYPE html>
<html lang="ar" dir="rtl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>محرر الصور المتطور</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.6.1/cropper.min.css">
<style>
.editor-container {
max-width: 800px;
margin: 0 auto;
padding: 20px;
}
.image-container {
width: 100%;
height: 500px;
margin-bottom: 20px;
border: 2px dashed #ddd;
position: relative;
overflow: hidden;
}
#image-preview {
max-width: 100%;
max-height: 100%;
display: block;
}
.controls {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
gap: 10px;
margin-bottom: 20px;
}
button {
padding: 10px;
background: #4361ee;
color: white;
border: none;
border-radius: 5px;
cursor: pointer;
transition: all 0.3s;
}
button:hover {
background: #3a56d4;
transform: translateY(-2px);
}
.result-container {
margin-top: 30px;
text-align: center;
}
#result {
max-width: 100%;
border: 1px solid #eee;
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
}
</style>
</head>
<body>
<div class="editor-container">
<input type="file" id="file-input" accept="image/*">
<div class="image-container">
<img id="image-preview">
</div>
<div class="controls">
<button id="crop-btn">اقتصاص</button>
<button id="rotate-left-btn">تدوير لليسار</button>
<button id="rotate-right-btn">تدوير لليمين</button>
<button id="flip-h-btn">انعكاس أفقي</button>
<button id="flip-v-btn">انعكاس رأسي</button>
<button id="reset-btn">إعادة تعيين</button>
<button id="download-btn">تحميل الصورة</button>
</div>
<div class="result-container">
<h3>النتيجة النهائية:</h3>
<img id="result">
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/cropperjs/1.6.1/cropper.min.js"></script>
<script>
const fileInput = document.getElementById('file-input');
const imagePreview = document.getElementById('image-preview');
const result = document.getElementById('result');
let cropper;
// تحميل الصورة
fileInput.addEventListener('change', (e) => {
const file = e.target.files[0];
if (!file) return;
const reader = new FileReader();
reader.onload = (event) => {
imagePreview.src = event.target.result;
if (cropper) {
cropper.destroy();
}
// تهيئة Cropper مع إعدادات حديثة
cropper = new Cropper(imagePreview, {
aspectRatio: 16 / 9,
viewMode: 2,
autoCropArea: 0.8,
responsive: true,
restore: false,
guides: false,
center: false,
highlight: false,
cropBoxMovable: true,
cropBoxResizable: true,
toggleDragModeOnDblclick: false,
minCanvasWidth: 300,
minCanvasHeight: 300,
background: false,
});
};
reader.readAsDataURL(file);
});
// الأزرار والتحكم
document.getElementById('crop-btn').addEventListener('click', () => {
const croppedCanvas = cropper.getCroppedCanvas({
width: 800,
height: 450,
minWidth: 300,
minHeight: 300,
maxWidth: 2000,
maxHeight: 2000,
fillColor: '#fff',
imageSmoothingEnabled: true,
imageSmoothingQuality: 'high',
});
result.src = croppedCanvas.toDataURL('image/jpeg', 0.9);
});
document.getElementById('rotate-left-btn').addEventListener('click', () => {
cropper.rotate(-90);
});
document.getElementById('rotate-right-btn').addEventListener('click', () => {
cropper.rotate(90);
});
document.getElementById('flip-h-btn').addEventListener('click', () => {
cropper.scaleX(-cropper.getData().scaleX || -1);
});
document.getElementById('flip-v-btn').addEventListener('click', () => {
cropper.scaleY(-cropper.getData().scaleY || -1);
});
document.getElementById('reset-btn').addEventListener('click', () => {
cropper.reset();
});
document.getElementById('download-btn').addEventListener('click', () => {
if (!result.src) return;
const link = document.createElement('a');
link.download = 'edited-image-' + new Date().getTime() + '.jpg';
link.href = result.src;
link.click();
});
</script>
</body>
</html>
أفضل الممارسات لسنة 2024
1. تحسين الأداء
- استخدم
requestIdleCallback
لعمليات المعالجة الثقيلة - قلل من إعادة التصيير باستخدام
debounce
لأحداث السحب - استخدم
web workers
لمعالجة الصور الكبيرة
2. تجربة المستخدم
- أضف مؤشر تحميل أثناء معالجة الصور
- استخدم
Intersection Observer
للتكبير البطيء (Lazy Zoom) - وفر اختصارات لوحة المفاتيح للعمليات الشائعة
3. الأمان
- تحقق من أنواع الملفات باستخدام
file.type
وmagic numbers
- قلل من حجم الصور قبل المعالجة باستخدام
createImageBitmap
- استخدم
CSP
لمنع هجمات XSS
4. التكامل مع التقنيات الحديثة
- دمج مع
Web Assembly
لعمليات المعالجة المعقدة - استخدام
Service Workers
للتخزين المؤقت للنتائج - دعم
Web Components
للتكامل مع أطر العمل المختلفة
جاهز لبدء استخدام Cropper.js في مشروعك؟
احصل على أحدث الإصدارات واستفد من كل الميزات الجديدة
تحميل أحدث إصدارموارد إضافية
تعديل الصور باستخدام Cropper.js
كود انشاء ادوات تعديل الصور Cropper
Tags
شروحات