مدیریت چارچوب‌های تصویر در ارائه‌ها در .NET

معرفی

یک چارچوب تصویر شکل است که حاوی یک تصویر می‌باشد—مانند یک تصویر در چارچوب.

می‌توانید یک تصویر را از طریق یک چارچوب تصویر به اسلاید اضافه کنید. به این ترتیب می‌توانید تصویر را با قالب‌بندی چارچوب تصویر فرمت کنید.

ایجاد یک چارچوب تصویر

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. مرجع یک اسلاید را از طریق شاخص آن دریافت کنید.
  3. یک شیء IPPImage را با افزودن یک تصویر به IImagescollection مرتبط با شیء presentation که برای پر کردن شکل استفاده خواهد شد، ایجاد کنید.
  4. عرض و ارتفاع تصویر را مشخص کنید.
  5. یک PictureFrame بر اساس عرض و ارتفاع تصویر از طریق متد AddPictureFrame که توسط شیء shape مرتبط با اسلاید مرجع ارائه می‌شود، ایجاد کنید.
  6. یک چارچوب تصویر (حاوی تصویر) را به اسلاید اضافه کنید.
  7. ارائه‌ی اصلاح شده را به صورت فایل PPTX بنویسید.

این کد C# نشان می‌دهد چگونه یک چارچوب تصویر ایجاد کنید:

// یک نمونه از کلاس Presentation که نمایانگر یک فایل PPTX است را ایجاد می‌کند
using (Presentation pres = new Presentation())
{
    // اسلاید اول را دریافت می‌کند
    ISlide slide = pres.Slides[0];

    // یک تصویر را بارگذاری می‌کند و آن را به مجموعه تصاویر ارائه اضافه می‌نماید
    IImage image = Images.FromFile("aspose-logo.jpg");
    IPPImage ppImage = pres.Images.AddImage(image);
    image.Dispose();

    // یک چارچوب تصویر با همان ارتفاع و عرض اضافه می‌کند
    IPictureFrame pictureFrame = slide.Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 150, ppImage.Width, ppImage.Height, ppImage);

    // برخی قالب‌بندی‌ها را بر روی چارچوب تصویر اعمال می‌کند
    pictureFrame.LineFormat.FillFormat.FillType = FillType.Solid;
    pictureFrame.LineFormat.FillFormat.SolidFillColor.Color = Color.Blue;
    pictureFrame.LineFormat.Width = 20;
    pictureFrame.Rotation = 45;

    // ارائه را به یک فایل PPTX می‌نویسد
    pres.Save("RectPicFrameFormat_out.pptx", SaveFormat.Pptx);
}

ایجاد یک چارچوب تصویر با مقیاس نسبی

با تغییر مقیاس نسبی تصویر، می‌توانید یک چارچوب تصویر پیچیده‌تر ایجاد کنید.

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. مرجع یک اسلاید را از طریق شاخص آن دریافت کنید.
  3. یک تصویر را به مجموعه تصاویر ارائه اضافه کنید.
  4. یک شیء IPPImage را با افزودن یک تصویر به IImagescollection مرتبط با شیء presentation که برای پر کردن شکل استفاده خواهد شد، ایجاد کنید.
  5. عرض و ارتفاع نسبی تصویر را در چارچوب تصویر مشخص کنید.
  6. ارائه‌ی اصلاح شده را به صورت فایل PPTX بنویسید.

این کد C# نشان می‌دهد چگونه یک چارچوب تصویر با مقیاس نسبی ایجاد کنید:

// یک نمونه از کلاس Presentation که نمایانگر یک فایل PPTX است را ایجاد می‌کند
using (Presentation presentation = new Presentation())
{
    // یک تصویر را بارگذاری می‌کند و آن را به مجموعه تصاویر ارائه اضافه می‌نماید
    IImage image = Images.FromFile("aspose-logo.jpg");
    IPPImage ppImage = presentation.Images.AddImage(image);
    image.Dispose();

    // یک چارچوب تصویر را به اسلاید اضافه می‌کند
    IPictureFrame pictureFrame = presentation.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 50, 100, 100, ppImage);

    // عرض و ارتفاع مقیاس نسبی را تنظیم می‌کند
    pictureFrame.RelativeScaleHeight = 0.8f;
    pictureFrame.RelativeScaleWidth = 1.35f;

    // ارائه را ذخیره می‌کند
    presentation.Save("Adding Picture Frame with Relative Scale_out.pptx", SaveFormat.Pptx);
}

استخراج تصاویر رستر از چارچوب‌های تصویر

می‌توانید تصاویر رستر را از اشیاء PictureFrame استخراج کنید و در فرمت‌های PNG، JPG و سایر فرمت‌ها ذخیره نمایید. مثال کد زیر نشان می‌دهد چگونه تصویری را از سند «sample.pptx» استخراج کرده و در فرمت PNG ذخیره کنید.

using (var presentation = new Presentation("sample.pptx"))
{
    var firstSlide = presentation.Slides[0];
    var firstShape = firstSlide.Shapes[0];

    if (firstShape is IPictureFrame pictureFrame)
    {
        var image = pictureFrame.PictureFormat.Picture.Image.SystemImage;
        image.Save("slide_1_shape_1.png", ImageFormat.Png);
    }
}

استخراج تصاویر SVG از چارچوب‌های تصویر

هنگامی که یک ارائه شامل گرافیک‌های SVG قرار گرفته در شکل‌های PictureFrame باشد، Aspose.Slides برای .NET به شما امکان می‌دهد تا تصاویر برداری اصلی را با تمام دقت استخراج کنید. با پیمایش مجموعه شکل‌های اسلاید، می‌توانید هر PictureFrame را شناسایی کنید، بررسی کنید آیا IPPImage زیرین محتویات SVG دارد یا نه، و سپس آن تصویر را به صورت فایل SVG بومی روی دیسک یا به‌صورت جریان ذخیره کنید.

کد نمونه زیر نشان می‌دهد چگونه یک تصویر SVG را از یک چارچوب تصویر استخراج کنید:

using var presentation = new Presentation("sample.pptx");

var slide = presentation.Slides[0];
var shape = slide.Shapes[0];

if (shape is IPictureFrame pictureFrame)
{
    var svgImage = pictureFrame.PictureFormat.Picture.Image.SvgImage;
    if (svgImage != null)
    {
        File.WriteAllText("output.svg", svgImage.SvgContent);
    }
}

دریافت شفافیت تصویر

Aspose.Slides به شما امکان می‌دهد اثر شفافیت اعمال‌شده بر یک تصویر را دریافت کنید. این کد C# عملیات را نشان می‌دهد:

using (var presentation = new Presentation("Test.pptx"))
{
    var pictureFrame = (IPictureFrame)presentation.Slides[0].Shapes[0];
    var imageTransform = pictureFrame.PictureFormat.Picture.ImageTransform;
    foreach (var effect in imageTransform)
    {
        if (effect is IAlphaModulateFixed alphaModulateFixed)
        {
            var transparencyValue = 100 - alphaModulateFixed.Amount;
            Console.WriteLine("Picture transparency: " + transparencyValue);
        }
    }
}

دریافت روشنایی و کنتراست تصویر

Aspose.Slides به شما امکان می‌دهد روشنایی و کنتراست اثر اعمال‌شده بر یک تصویر را دریافت کنید. رابط ILuminance این اثر تبدیل تصویر را نشان می‌دهد.

این کد C# نشان می‌دهد چگونه تنظیمات روشنایی و کنتراست را از یک چارچوب تصویر دریافت کنید:

using (var presentation = new Presentation("sample.pptx"))
{
    var slide = presentation.Slides[0];
    var shape = slide.Shapes[0];
    var pictureFrame = (IPictureFrame)shape;

    var imageTransform = pictureFrame.PictureFormat.Picture.ImageTransform;
    foreach (var effect in imageTransform)
    {
        if (effect is ILuminance luminanceEffect)
        {
            var luminance = luminanceEffect.GetEffective();
            var brightness = luminance.Brightness;
            var contrast = luminance.Contrast;

            Console.WriteLine("Brightness: " + brightness);
            Console.WriteLine("Contrast: " + contrast);
        }
    }
}

قالب‌بندی چارچوب تصویر

Aspose.Slides گزینه‌های قالب‌بندی متعددی را که می‌توان به یک چارچوب تصویر اعمال کرد، ارائه می‌دهد. با استفاده از این گزینه‌ها می‌توانید چارچوب تصویر را به‌گونه‌ای تغییر دهید که با نیازهای خاص شما منطبق شود.

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. مرجع یک اسلاید را از طریق شاخص آن دریافت کنید.
  3. یک شیء IPPImage را با افزودن یک تصویر به IImagescollection مرتبط با شیء presentation که برای پر کردن شکل استفاده خواهد شد، ایجاد کنید.
  4. عرض و ارتفاع تصویر را مشخص کنید.
  5. یک PictureFrame بر اساس عرض و ارتفاع تصویر از طریق متد AddPictureFrame که توسط شیء IShapes مرتبط با اسلاید مرجع ارائه می‌شود، ایجاد کنید.
  6. چارچوب تصویر (حاوی تصویر) را به اسلاید اضافه کنید.
  7. رنگ خط چارچوب تصویر را تنظیم کنید.
  8. ضخامت خط چارچوب تصویر را تنظیم کنید.
  9. چارچوب تصویر را با مقدار مثبت یا منفی چرخانید.
    • مقدار مثبت تصویر را ساعت‌گرد می‌چرخاند.
    • مقدار منفی تصویر را پادساعت‌گرد می‌چرخاند.
  10. چارچوب تصویر (حاوی تصویر) را به اسلاید اضافه کنید.
  11. ارائه‌ی اصلاح شده را به صورت فایل PPTX بنویسید.

این کد C# فرآیند قالب‌بندی چارچوب تصویر را نشان می‌دهد:

 // یک نمونه از کلاس Presentation که نمایانگر یک فایل PPTX است را ایجاد می‌کند
using (Presentation presentation = new Presentation())
{
    // اسلاید اول را دریافت می‌کند
    ISlide slide = presentation.Slides[0];

    // یک تصویر را بارگذاری می‌کند و آن را به مجموعه تصاویر ارائه اضافه می‌نماید
    IImage image = Images.FromFile("aspose-logo.jpg");
    IPPImage ppImage = presentation.Images.AddImage(image);
    image.Dispose();

    // یک چارچوب تصویر با همان ارتفاع و عرض تصویر اضافه می‌کند
    IPictureFrame pictureFrame = slide.Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 150, ppImage.Width, ppImage.Height, ppImage);

    // برخی قالب‌بندی‌ها را بر روی چارچوب تصویر اعمال می‌کند
    pictureFrame.LineFormat.FillFormat.FillType = FillType.Solid;
    pictureFrame.LineFormat.FillFormat.SolidFillColor.Color = Color.Blue;
    pictureFrame.LineFormat.Width = 20;
    pictureFrame.Rotation = 45;

    // ارائه را به یک فایل PPTX می‌نویسد
    presentation.Save("RectPicFrameFormat_out.pptx", SaveFormat.Pptx);
}

افزودن تصویر به عنوان لینک

برای جلوگیری از بزرگ شدن اندازه ارائه‌ها، می‌توانید تصاویر (یا ویدیوها) را از طریق لینک‌ها اضافه کنید به‌جای اینکه فایل‌ها را مستقیماً در ارائه‌ها جاسازی کنید. این کد C# نشان می‌دهد چگونه یک تصویر و ویدیو را به یک جایگذاشتن اضافه کنید:

using (var presentation = new Presentation("input.pptx"))
{
    var shapesToRemove = new List<IShape>();
    int shapesCount = presentation.Slides[0].Shapes.Count;

    for (var i = 0; i < shapesCount; i++)
    {
        var autoShape = presentation.Slides[0].Shapes[i];

        if (autoShape.Placeholder == null)
        {
            continue;
        }

        switch (autoShape.Placeholder.Type)
        {
            case PlaceholderType.Picture:
                var pictureFrame = presentation.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle,
                        autoShape.X, autoShape.Y, autoShape.Width, autoShape.Height, null);

                pictureFrame.PictureFormat.Picture.LinkPathLong =
                    "https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg";

                shapesToRemove.Add(autoShape);
                break;

            case PlaceholderType.Media:
                var videoFrame = presentation.Slides[0].Shapes.AddVideoFrame(
                    autoShape.X, autoShape.Y, autoShape.Width, autoShape.Height, "");

                videoFrame.PictureFormat.Picture.LinkPathLong =
                    "https://upload.wikimedia.org/wikipedia/commons/3/3a/I.M_at_Old_School_Public_Broadcasting_in_October_2016_02.jpg";

                videoFrame.LinkPathLong = "https://youtu.be/t_1LYZ102RA";

                shapesToRemove.Add(autoShape);
                break;
        }
    }

    foreach (var shape in shapesToRemove)
    {
        presentation.Slides[0].Shapes.Remove(shape);
    }

    presentation.Save("output.pptx", SaveFormat.Pptx);
}

قاب‌بندی تصاویر

این کد C# نشان می‌دهد چگونه یک تصویر موجود در اسلاید را برش دهید:

using (Presentation presentation = new Presentation())
{
    // یک شیء تصویر جدید ایجاد می‌کند
    IImage image = Images.FromFile(imagePath);
    IPPImage newImage = presentation.Images.AddImage(image);
    image.Dispose();

    // یک PictureFrame به اسلاید اضافه می‌کند
    IPictureFrame picFrame = presentation.Slides[0].Shapes.AddPictureFrame(
        ShapeType.Rectangle, 100, 100, 420, 250, newImage);

    // تصویر را برش می‌دهد (مقادیر درصدی)
    picFrame.PictureFormat.CropLeft = 23.6f;
    picFrame.PictureFormat.CropRight = 21.5f;
    picFrame.PictureFormat.CropTop = 3;
    picFrame.PictureFormat.CropBottom = 31;

    // نتیجه را ذخیره می‌کند
    presentation.Save("PictureFrameCrop.pptx", SaveFormat.Pptx);
}

حذف نواحی برش‌خورده تصویر

اگر می‌خواهید نواحی برش‌خورده یک تصویر موجود در یک چارچوب را حذف کنید، می‌توانید از متد IPictureFillFormat.DeletePictureCroppedAreas استفاده کنید. این متد تصویر برش‌خورده یا تصویر اصلی را برمی‌گرداند اگر برش ضروری نباشد.

این کد C# عملیات را نشان می‌دهد:

using (Presentation presentation = new Presentation("PictureFrameCrop.pptx"))
{
    ISlide slide = presentation.Slides[0];

    // چارچوب تصویر را از اسلاید اول دریافت می‌کند
    IPictureFrame picFrame = slide.Shapes[0] as IPictureFrame;

    // نواحی برش‌خورده تصویر چارچوب تصویر را حذف کرده و تصویر برش‌خورده را برمی‌گرداند
    IPPImage croppedImage = picFrame.PictureFormat.DeletePictureCroppedAreas();

    // نتیجه را ذخیره می‌کند
    presentation.Save("PictureFrameDeleteCroppedAreas.pptx", SaveFormat.Pptx);
}

فشرده‌سازی تصاویر

می‌توانید یک تصویر را در ارائه با استفاده از متد IPictureFillFormat.CompressImage فشرده کنید. این متد تصویر را با کاهش اندازه بر اساس اندازه شکل و وضوح مشخص‌شده، و با گزینه حذف نواحی برش‌خورده، فشرده می‌کند.

این روش اندازه و وضوح تصویر را مشابه ویژگی Picture Format → Compress Pictures → Resolution در PowerPoint تنظیم می‌کند.

کدهای C# زیر نشان می‌دهند چگونه با تعیین وضوح هدف و به‌صورت اختیاری حذف نواحی برش‌خورده، یک تصویر را در ارائه فشرده کنید:

using (Presentation presentation = new Presentation("demo.pptx"))
{
    ISlide slide = presentation.Slides[0];
    IPictureFrame pictureFrame = slide.Shapes[0] as IPictureFrame;

    // تصویر را با وضوح هدف 150 DPI (وضوح وب) فشرده می‌کند و نواحی برش‌خورده را حذف می‌نماید.
    bool result = pictureFrame.PictureFormat.CompressImage(true, PicturesCompression.Dpi150);

    // نتیجه فشرده‌سازی را بررسی کنید.
    if (result)
    {
        Console.WriteLine("Image successfully compressed.");
    }
    else
    {
        Console.WriteLine("Image compression failed or no changes were necessary.");
    }

    presentation.Save("CompressedImage.pptx", SaveFormat.Pptx);
}

یا با استفاده مستقیم از مقدار DPI دلخواه:

using (Presentation presentation = new Presentation("demo.pptx"))
{
    ISlide slide = presentation.Slides[0];
    IPictureFrame pictureFrame = slide.Shapes[0] as IPictureFrame;

    // تصویر را به 150 DPI (وضوح وب) فشرده می‌کند و نواحی برش‌خورده را حذف می‌نماید.
    pictureFrame.PictureFormat.CompressImage(true, 150f);

    presentation.Save("CompressedImage.pptx", SaveFormat.Pptx);
}

قفل کردن نسبت عرض به ارتفاع

اگر می‌خواهید شکلی که شامل یک تصویر است حتی پس از تغییر ابعاد تصویر، نسبت عرض به ارتفاع خود را حفظ کند، می‌توانید از ویژگی IPictureFrameLock.AspectRatioLocked برای تنظیم ویژگی Lock Aspect Ratio استفاده کنید.

این کد C# نشان می‌دهد چگونه نسبت عرض به ارتفاع یک شکل را قفل کنید:

using (Presentation pres = new Presentation("pres.pptx"))
{
    ILayoutSlide layout = pres.LayoutSlides.GetByType(SlideLayoutType.Custom);
    ISlide emptySlide = pres.Slides.AddEmptySlide(layout);

    IImage image = Images.FromFile("image.png");
    IPPImage presImage = pres.Images.AddImage(image);
    image.Dispose();

    IPictureFrame pictureFrame = emptySlide.Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 150, presImage.Width, presImage.Height, presImage);

    // شکل را برای حفظ نسبت عرض به ارتفاع هنگام تغییر اندازه تنظیم می‌کند
    pictureFrame.PictureFrameLock.AspectRatioLocked = true;
}

استفاده از ویژگی StretchOff

با استفاده از ویژگی‌های StretchOffsetLeft، StretchOffsetTop، StretchOffsetRight و StretchOffsetBottom از رابط IPictureFillFormat و کلاس PictureFillFormat می‌توانید یک مستطیل پرکننده را مشخص کنید.

زمانی که کشش برای یک تصویر مشخص می‌شود، یک مستطیل منبع به اندازه مستطیل پرکننده مقیاس می‌شود. هر لبهٔ مستطیل پرکننده توسط درصدی نسبت به لبهٔ مربوطهٔ جعبه محدودهٔ شکل تعریف می‌شود. درصد مثبت یک حذف داخلی و درصد منفی یک گسترش خارجی را مشخص می‌کند.

  1. یک نمونه از کلاس Presentation ایجاد کنید.
  2. مرجع یک اسلاید را از طریق شاخص آن دریافت کنید.
  3. یک مستطیل AutoShape اضافه کنید.
  4. یک تصویر ایجاد کنید.
  5. نوع پر کردن شکل را تنظیم کنید.
  6. حالت پر کردن تصویر شکل را تنظیم کنید.
  7. یک تصویر تنظیم‌شده برای پر کردن شکل اضافه کنید.
  8. افست‌های تصویر را از لبهٔ مربوطهٔ جعبه محدودهٔ شکل مشخص کنید.
  9. ارائه‌ی اصلاح شده را به صورت فایل PPTX بنویسید.

این کد C# فرآیندی را نشان می‌دهد که در آن از ویژگی StretchOff استفاده می‌شود:

using (Presentation pres = new Presentation())
{
    IImage image = Images.FromFile("image.png");
    IPPImage ppImage = pres.Images.AddImage(image);
    image.Dispose();

    IPictureFrame pictureFrame = pres.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 10, 10, 400, 400, ppImage);

    // تصویر را از هر طرف در بدنه شکل کشیده تنظیم می‌کند
    pictureFrame.PictureFormat.PictureFillMode = PictureFillMode.Stretch;
    pictureFrame.PictureFormat.StretchOffsetLeft = 24;
    pictureFrame.PictureFormat.StretchOffsetRight = 24;
    pictureFrame.PictureFormat.StretchOffsetTop = 24;
    pictureFrame.PictureFormat.StretchOffsetBottom = 24;

    pres.Save("imageStretch.pptx", SaveFormat.Pptx);
}

سوالات متداول

چگونه می‌توانم بفهمم کدام فرمت‌های تصویر برای PictureFrame پشتیبانی می‌شوند؟

Aspose.Slides هم تصاویر رستر (PNG، JPEG، BMP، GIF و غیره) و هم تصاویر برداری (مثلاً SVG) را از طریق شیء تصویری که به یک PictureFrame اختصاص داده می‌شود، پشتیبانی می‌کند. فهرست فرمت‌های پشتیبانی‌شده معمولاً با توانمندی‌های موتور اسلاید و تبدیل تصویر همپوشانی دارد.

اضافه کردن ده‌ها تصویر بزرگ چه تأثیری بر اندازه و عملکرد PPTX دارد؟

جاسازی تصاویر بزرگ حجم فایل و مصرف حافظه را افزایش می‌دهد؛ لینک کردن تصاویر به کاهش حجم ارائه کمک می‌کند اما نیاز دارد فایل‌های خارجی در دسترس باقی بمانند. Aspose.Slides قابلیت افزودن تصاویر به‌صورت لینک برای کاهش حجم فایل را فراهم می‌کند.

چگونه می‌توانم یک شیء تصویر را از جابجایی/تغییر اندازه ناخواسته قفل کنم؟

برای یک PictureFrame می‌توانید از قفل‌های شکل استفاده کنید (مثلاً غیر فعال کردن جابجایی یا تغییر اندازه). مکانیسم قفل‌گذاری برای اشکال در مقالهٔ جداگانهٔ محافظت شرح داده شده و برای انواع مختلف اشکال از جمله PictureFrame پشتیبانی می‌شود.

آیا صحت برداری SVG هنگام خروجی به PDF/تصاویر حفظ می‌شود؟

Aspose.Slides امکان استخراج یک SVG از یک PictureFrame به‌صورت بردار اصلی را فراهم می‌کند. هنگام خروجی به PDF یا فرمت‌های رستر، نتیجه ممکن است بسته به تنظیمات خروجی رستر شود؛ این که SVG اصلی به‌صورت بردار ذخیره شده است توسط رفتار استخراج تأیید می‌شود.