العمل مع الصور
العمل مع الصور
Aspose.Cells FOSS for Java allows you to embed images directly into خلايى ورقة العمل واسترداد أو إزالة الصور الموجودة. تم إدارتها من خلال PictureCollection يتعرض لكل واحد منهم Worksheet,، و كل واحد منكم Picture يمنح الجسم الوصول إلى بيانات الصورة، مرساة لها الموقع، ونوع الصورة التي تم الكشف عنها، وأنواع محتوى MIME.
نظرة عامة
كل ورقة عمل تعرض صورها من خلال Worksheet.getPictures(), والتي تعيد a PictureCollection.يمكنك إضافة الصور من بايت. المجموعة، و InputStream,، أو مسار ملف. يقدم المجموعة مساعد طرق للكشف عن نوع الصورة من البايتات الخام، تحديد الملف تمديد من بيانات الصورة، وتوسيع المخطط إلى نوع المحتوى MIME.
الوصول إلى الصور على ورقة عمل
استعادة الملفات PictureCollection عبر Worksheet.getPictures().استخدمها . PictureCollection.getCount() لتحديد عدد الصور الموجودة. الصور الفردية يمكن الوصول إليها بواسطة مؤشر على أساس صفر من خلال: PictureCollection.get(index).
إضافة صورة
ثلاث حالات إفراط في الحمل PictureCollection.add() متاحة، كل واحد منها إرجاع المؤشر على أساس الصفر للصورة الجديدة:
add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, imageData)من صفحة بايتاتadd(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, stream)من InputStreamadd(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, fileName)من مسار ملف
// Embed an image from bytes into cells A1:C5
byte[] imgData = Files.readAllBytes(Paths.get("logo.png"));
int idx = ws.getPictures().add(0, 0, 4, 2, imgData);قراءة خصائص الصورة
بمجرد أن تمسك بـ… Picture المرجع، قراءة وضعية المرساة., بيانات الصورة الخام، نوع الصور المكتشفة ونوع محتوى MIME:
PictureCollection pics = ws.getPictures();
for (int i = 0; i < pics.getCount(); i++) {
Picture p = pics.get(i);
System.out.printf("Name=%s type=%s anchor=[%d,%d]-[%d,%d]%n",
p.getName(), p.getImageType(),
p.getUpperLeftRow(), p.getUpperLeftColumn(),
p.getLowerRightRow(), p.getLowerRightColumn());
}الكشف عن نوع الصورة من البايتات الخام
استخدام PictureCollection.detectImageType(data) لتحديد ImageType قيمة enum من صفحة بايت دون تضمينها أولاً.
PictureCollection pics = ws.getPictures();
byte[] data = Files.readAllBytes(Paths.get("chart.png"));
ImageType type = pics.detectImageType(data);
String ext = pics.extensionFromData(data);
String mime = pics.contentTypeFromExtension(ext);
System.out.printf("type=%s ext=%s mime=%s%n", type, ext, mime);إزالة صورة
استخدام PictureCollection.removeAt(index) لحذف صورة بواسطة مؤشر على أساس الصفر:
ws.getPictures().removeAt(0);نصائح وأفضل الممارسات
- استخدموا الـ
add(..., imageData)الإفراط في التحميل عندما يكون لديك البايت بالفعل في الذاكرة، استخدم سيل الحمل الزائد لتجنب تحميل الملفات الكبيرة بالكامل. - اتصلوا
PictureCollection.detectImageType(data)لتأكيد الصورة التنسيق قبل الإدراج. - الصفوف والعمود المربطة هي مؤشرات قائمة على صفر.
Picture.getName()يعيد معرف داخلي وليس اسم الملف الأصلي.- الصور محفوظة على XLSX ذهاب وآخر.
القضايا المشتركة
| القضية | السبب | إصلاح |
|---|---|---|
getCount() يعيد 0 بعد الإضافة | تم إغلاق التدفق قبل الإضافة. | تأكد من أن InputStream مفتوح وقابل للقراءة |
ImageType.UNKNOWN عُودت | بيانات الصورة غير المدعومة أو المفسدة | تحقق من أن الملف PNG، JPEG، GIF، BMP أو TIFF صالح |
| الموقع الصور يبدو خاطئاً | فهرس الصفوف/العمدة غير صحيح | استخدام المؤشرات القائمة على الصفر لجميع معايير المرساة. |
FAQ
ما هي صيغ الصور المدعومة للدمج؟?
المجلس الوزاري ImageType يغطي enum PNG و JPEG و GIF و BMP و TIFF و EMF. غير ذلك يمكن أن يتم تضمين الصيغ كبيانات ثنائية ولكن لديها ImageType من UNKNOWN.
كيف أحصل على تمديد ملف الصورة المضمنة؟?
اتصلوا PictureCollection.extensionFromData(picture.getData()) مع المجموعة صورة بايتات خام.
هل يمكنني استبدال بيانات صورة موجودة؟?
نعم، إسترد المكالمة. Picture عبر get(index) و اتصل به setData(bytes).
كيف أجد صورة بالاسم؟?
التكرار على جميع الصور مع getCount() و get(index) و مقارنة Picture.getName().
هل الصور تُحافظ على حفظها عند الحفاظ عليها في صيغ أخرى؟?
الحفاظ على الصورة يعتمد على تنسيق الهدف. XLSX الدور الثاني مدعوم بالكامل.
إشارة API
صورة
| طريقة | نوع الإرجاع | وصف |
|---|---|---|
getName() | String | اسم الصورة الداخلي. |
setName(name) | void | يضع الاسم الداخلي. |
getUpperLeftRow() | int | صف الصفر في الرأس الأيسر العلوي. |
setUpperLeftRow(row) | void | يضع صف المراسي العلوي اليسرى. |
getUpperLeftColumn() | int | عمود الصفر من الرأس العلوي الأيسر. |
setUpperLeftColumn(col) | void | يضع عمود المراسي العلوي اليسرى. |
getLowerRightRow() | int | صف الصفر من الرأس الأيسر السفلي. |
setLowerRightRow(row) | void | يضع صف المراسي الأدنى اليمنى. |
getLowerRightColumn() | int | عمود الصفر من الرأس الأيسر السفلي. |
setLowerRightColumn(col) | void | يضع عمود المراسي في الأسفل اليمنى. |
getImageType() | ImageType | تم الكشف عن الصورة في شكل قيمة enum. |
getData() | byte[] | بايتات الصورة الخام. |
setData(data) | void | يستبدل بايت الصورة الخام. |
getContentType() | String | نوع المحتوى MIME سلسلة. |
PictureCollection
| طريقة | نوع الإرجاع | وصف |
|---|---|---|
getCount() | int | عدد الصور على ورقة العمل. |
get(index) | Picture | يعيد الصورة عند المؤشر المستند إلى صفر. |
add(...) | int | يضيف صورة، يعيد مؤشرها القائم على الصفر. |
removeAt(index) | void | يزيل الصورة في المؤشر المستند إلى صفر. |
detectImageType(data) | ImageType | يكتشف شكل الصورة من البايتات الخام. |
extensionFromData(data) | String | يعيد تمديد الملف للبيانات الصورة. |
contentTypeFromExtension(ext) | String | يعيد نوع MIME لموسع ملف. |