تعزيز معالجة الصور باستخدام الواجهة الحديثة
المقدمة
تاريخيًا، تعتمد Aspose Slides على System.Drawing ولها في واجهة برمجة التطبيقات العامة الفئات التالية من هناك:
اعتبارًا من الإصدار 24.4، تم إعلان أن هذه الواجهة العامة مهملة.
نظرًا لإزالة دعم System.Drawing في الإصدارات .NET6 وما فوق للإصدارات غير الويندوز (تغيير كسرية)، نفذت Slides نهجًا يتألف من حزمتين:
- Aspose.Slides.NET - دعم لـ .NET6+ على ويندوز، .NETStandard على ويندوز/لينكس/ماك، .NETFramework 2+ (ويندوز).
- يعتمد على System.Drawing.Common.
- Aspose.Slides.NET6.CrossPlatform - نسخة ويندوز/لينكس/ماك بدون تبعيات.
العقبة في Aspose.Slides.NET6.CrossPlatform هي أنه ينفذ نسخته الخاصة من System.Drawing في نفس مساحة الاسم (لدعم التوافق مع الواجهة العامة). لذا، عند استخدام Aspose.Slides.NET6.CrossPlatform وSystem.Drawing من .NET Framework أو حزمة System.Drawing.Common في نفس الوقت، يحدث تعارض في الأسماء ما لم يتم استخدام اسم مستعار.
من أجل التخلص من التبعيات على System.Drawing في حزمة Aspose.Slides.NET الرئيسية، أضفنا ما يسمى بـ “الواجهة الحديثة” - أي الواجهة التي يجب استخدامها بدلاً من القديمة، والتي تحتوي توقيعاتها على تبعيات على الأنواع التالية من System.Drawing: Image وBitmap. تم إعلان PrinterSettings وGraphics مهملتين وتم إزالة دعمهما من واجهة برمجة التطبيقات العامة لـ Slides.
في الإصدارات الحالية، عُد الواجهة العامة التي تعتمد على System.Drawing إلى الحالة القديمة/المهملة. استخدم الواجهة الحديثة للشفرة الجديدة وعند ترحيل سير عمل معالجة الصور الحالي.
الواجهة الحديثة
تمت إضافة الفئات والعدادات التالية إلى الواجهة العامة:
- Aspose.Slides.IImage - تمثّل الصورة النقطية أو المتجهة.
- Aspose.Slides.ImageFormat - تمثّل تنسيق ملف الصورة.
- Aspose.Slides.Images - طرق لإنشاء والعمل مع واجهة IImage.
يرجى ملاحظة أن IImage قابل للتصرف (ينفّذ واجهة IDisposable ويجب تغليفه باستخدام using أو إخلاؤه بطريقة ملائمة أخرى).
استخدم GetImage لتصوير شريحة واحدة أو شكل واحد. استخدم GetImages لتصوير عدة شرائح عرض. استخدم طرق Images لتحميل الصور، AddImage مع IImage لإضافتها إلى عرض تقديمي، وReplaceImage مع IImage لتحديث صورة موجودة في العرض.
سيناريو نموذجي لاستخدام الواجهة الحديثة قد يبدو كما يلي:
using (Presentation pres = new Presentation())
{
IPPImage ppImage;
// إنشاء مثيل قابل للتصرف من IImage من الملف على القرص.
using (IImage image = Images.FromFile("image.png"))
{
// إنشاء صورة PowerPoint بإضافة مثيل من IImage إلى صور العرض التقديمي.
ppImage = pres.Images.AddImage(image);
}
// إضافة شكل صورة إلى الشريحة #1
pres.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, ppImage);
// الحصول على مثيل من IImage يمثل الشريحة #1.
using (var slideImage = pres.Slides[0].GetImage(new Size(1920, 1080)))
{
// حفظ الصورة على القرص.
slideImage.Save("slide1.jpeg", ImageFormat.Jpeg);
}
}
استبدال الشفرة القديمة بالواجهة الحديثة
لتسهيل الانتقال، يكرر واجهـة IImage التوقيعات المنفصلة للفئتين Image وBitmap. بصورة عامة، كل ما عليك هو استبدال استدعاء الطريقة القديمة التي تستخدم System.Drawing بالاستدعاء الجديد.
إنتاج صورة مصغرة للشريحة
الواجهة القديمة/المهملة:
using (Presentation pres = new Presentation("pres.pptx"))
{
pres.Slides[0].GetThumbnail().Save("slide1.png");
}
الواجهة الحديثة:
using (Presentation pres = new Presentation("pres.pptx"))
{
pres.Slides[0].GetImage().Save("slide1.png");
}
إنتاج صورة مصغرة للشكل
الواجهة القديمة/المهملة:
using (Presentation pres = new Presentation("pres.pptx"))
{
pres.Slides[0].Shapes[0].GetThumbnail().Save("shape.png");
}
الواجهة الحديثة:
using (Presentation pres = new Presentation("pres.pptx"))
{
pres.Slides[0].Shapes[0].GetImage().Save("shape.png");
}
إنتاج صورة مصغرة للعرض التقديمي
الواجهة القديمة/المهملة:
using (Presentation pres = new Presentation("pres.pptx"))
{
var bitmaps = pres.GetThumbnails(new RenderingOptions(), new Size(1980, 1028));
try
{
for (var index = 0; index < bitmaps.Length; index++)
{
Bitmap thumbnail = bitmaps[index];
thumbnail.Save($"slide{index}.png", ImageFormat.Png);
}
}
finally
{
foreach (Bitmap bitmap in bitmaps)
{
bitmap.Dispose();
}
}
}
الواجهة الحديثة:
using (Presentation pres = new Presentation("pres.pptx"))
{
var images = pres.GetImages(new RenderingOptions(), new Size(1980, 1028));
try
{
for (var index = 0; index < images.Length; index++)
{
IImage thumbnail = images[index];
thumbnail.Save($"slide{index}.png", ImageFormat.Png);
}
}
finally
{
foreach (IImage image in images)
{
image.Dispose();
}
}
}
إضافة صورة إلى عرض تقديمي
الواجهة القديمة/المهملة:
using (Presentation pres = new Presentation())
{
IPPImage ppImage;
using (Image image = Image.FromFile("image.png"))
{
ppImage = pres.Images.AddImage(image);
}
pres.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, ppImage);
}
الواجهة الحديثة:
using (Presentation pres = new Presentation())
{
IPPImage ppImage;
using (IImage image = Aspose.Slides.Images.FromFile("image.png"))
{
ppImage = pres.Images.AddImage(image);
}
pres.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 100, 100, ppImage);
}
الطرق/الخصائص المهملة واستبدالها في الواجهة الحديثة
Presentation
| توقيع الطريقة | توقيع الطريقة البديلة |
|---|---|
| public Bitmap[] GetThumbnails(IRenderingOptions options) | GetImages(IRenderingOptions options) |
| public Bitmap[] GetThumbnails(IRenderingOptions options, int[] slides) | GetImages(IRenderingOptions options, int[] slides) |
| public Bitmap[] GetThumbnails(IRenderingOptions options, float scaleX, float scaleY) | GetImages(IRenderingOptions options, float scaleX, float scaleY) |
| public Bitmap[] GetThumbnails(IRenderingOptions options, int[] slides, float scaleX, float scaleY) | GetImages(IRenderingOptions options, int[] slides, float scaleX, float scaleY) |
| public Bitmap[] GetThumbnails(IRenderingOptions options, Size imageSize) | GetImages(IRenderingOptions options, Size imageSize) |
| public Bitmap[] GetThumbnails(IRenderingOptions options, int[] slides, Size imageSize) | GetImages(IRenderingOptions options, int[] slides, Size imageSize) |
| public void Save(string fname, SaveFormat format, HttpResponse response, bool showInline) | لا يوجد استبدال في الواجهة الحديثة |
| public void Save(string fname, SaveFormat format, ISaveOptions options, HttpResponse response, bool showInline) | لا يوجد استبدال في الواجهة الحديثة |
| public void Print() | لا يوجد استبدال في الواجهة الحديثة |
| public void Print(PrinterSettings printerSettings) | لا يوجد استبدال في الواجهة الحديثة |
| public void Print(string printerName) | لا يوجد استبدال في الواجهة الحديثة |
| public void Print(PrinterSettings printerSettings, string presName) | لا يوجد استبدال في الواجهة الحديثة |
Shape
| توقيع الطريقة | توقيع الطريقة البديلة |
|---|---|
| public Bitmap GetThumbnail() | GetImage |
| public Bitmap GetThumbnail(ShapeThumbnailBounds bounds, float scaleX, float scaleY) | GetImage(ShapeThumbnailBounds bounds, float scaleX, float scaleY) |
Slide
| توقيع الطريقة | توقيع الطريقة البديلة |
|---|---|
| public Bitmap GetThumbnail(float scaleX, float scaleY) | GetImage(float scaleX, float scaleY) |
| public Bitmap GetThumbnail() | GetImage |
| public Bitmap GetThumbnail(IRenderingOptions options) | GetImage(IRenderingOptions options) |
| public Bitmap GetThumbnail(Size imageSize) | GetImage(Size imageSize) |
| public Bitmap GetThumbnail(ITiffOptions options) | GetImage(ITiffOptions options) |
| public Bitmap GetThumbnail(IRenderingOptions options, float scaleX, float scaleY) | GetImage(IRenderingOptions options, float scaleX, float scaleY) |
| public Bitmap GetThumbnail(IRenderingOptions options, Size imageSize) | GetImage(IRenderingOptions options, Size imageSize) |
| public void RenderToGraphics(IRenderingOptions options, Graphics graphics) | لا يوجد استبدال في الواجهة الحديثة |
| public void RenderToGraphics(IRenderingOptions options, Graphics graphics, float scaleX, float scaleY) | لا يوجد استبدال في الواجهة الحديثة |
| public void RenderToGraphics(IRenderingOptions options, Graphics graphics, Size renderingSize) | لا يوجد استبدال في الواجهة الحديثة |
Output
| توقيع الطريقة | توقيع الطريقة البديلة |
|---|---|
| public IOutputFile Add(string path, Image image) | Add(string path, IImage image) |
ImageCollection
| توقيع الطريقة | توقيع الطريقة البديلة |
|---|---|
| IPPImage AddImage(Image image) | AddImage(IImage image) |
ImageWrapperFactory
| توقيع الطريقة | توقيع الطريقة البديلة |
|---|---|
| IImageWrapper CreateImageWrapper(Image image) | CreateImageWrapper(IImage image) |
PPImage
| توقيع الطريقة/الخاصية | توقيع الطريقة البديلة |
|---|---|
| void ReplaceImage(Image newImage) | ReplaceImage(IImage newImage) |
| Image SystemImage { get; } | IImage Image { get; } |
PatternFormat
| توقيع الطريقة | توقيع الطريقة البديلة |
|---|---|
| Bitmap GetTileImage(Color background, Color foreground) | GetTile(Color background, Color foreground) |
| Bitmap GetTileImage(Color styleColor) | GetTile(Color styleColor) |
IPatternFormatEffectiveData
| توقيع الطريقة | توقيع الطريقة البديلة |
|---|---|
| Bitmap GetTileImage(Color background, Color foreground) | GetTileIImage(SlidesImage image) |
دعم الواجهة للرسوميات وPrinterSettings
فئة Graphics غير مدعومة في إصدارات .NET6 وما فوق متعددة المنصات. في Aspose Slides، استخدم طرق تصوير الصور في الواجهة الحديثة بدلاً من الواجهة التي تُصوّر إلى Graphics: ISlide
- public void RenderToGraphics(IRenderingOptions options, Graphics graphics)
- public void RenderToGraphics(IRenderingOptions options, Graphics graphics, float scaleX, float scaleY)
- public void RenderToGraphics(IRenderingOptions options, Graphics graphics, Size renderingSize)
كما أن الواجهة المتعلقة بالطباعة عبر PrinterSettings ليس لها استبدال مباشر في الواجهة الحديثة:
- public void Presentation.Print
- public void Print(PrinterSettings printerSettings)
- public void Print(string printerName)
- public void Print(PrinterSettings printerSettings, string presName)
الأسئلة الشائعة
لماذا تم إلغاء Graphics؟
تم إلغاء دعم Graphics في الواجهة العامة لتوحيد العمل مع التصوير والصور، وإزالة الاعتماد على التبعيات الخاصة بالنظام، والانتقال إلى نهج متعدد المنصات باستخدام IImage. استخدم GetImage أو GetImages بدلاً من التصوير إلى Graphics.
ما الفائدة العملية من IImage مقارنةً بـ Image/Bitmap؟
توحد IImage العمل مع الصور النقطية والمتجهة، تبسّط الحفظ إلى صيغ متعددة عبر ImageFormat، تقلل الاعتماد على System.Drawing، وتجعل الشفرة أكثر قابلية للنقل بين البيئات.
هل ستؤثر الواجهة الحديثة على أداء إنشاء الصور المصغرة؟
التحويل من GetThumbnail إلى GetImage لا يضعف السيناريوهات: توفر الطرق الجديدة نفس القدرات لإنتاج الصور مع الخيارات والأحجام، مع الحفاظ على دعم خيارات التصوير. يعتمد التحسن أو الانخفاض الفعلي على السيناريو، لكن من الناحية الوظيفية التعويضات متكافئة.