Správa obrázkových rámečků v prezentacích v .NET
Úvod
Obrázkový rámeček je tvar, který obsahuje obrázek – je to jako obrázek v rámečku.
Můžete přidat obrázek na snímek pomocí obrázkového rámečku. Tímto způsobem můžete formátovat obrázek formátováním obrázkového rámečku.
Tip
Aspose poskytuje bezplatné konvertory – JPEG na PowerPoint a PNG na PowerPoint – které umožňují rychle vytvářet prezentace z obrázků.Vytvoření obrázkového rámečku
- Vytvořte instanci třídy Presentation.
- Získejte odkaz na snímek pomocí jeho indexu.
- Vytvořte objekt IPPImage přidáním obrázku do IImagescollection přidružené k objektu prezentace, který bude použit k vyplnění tvaru.
- Zadejte šířku a výšku obrázku.
- Vytvořte PictureFrame na základě šířky a výšky obrázku pomocí metody
AddPictureFrame, kterou poskytuje objekt tvaru přidružený k referencovanému snímku. - Přidejte obrázkový rámeček (obsahující obrázek) na snímek.
- Uložte upravenou prezentaci jako soubor PPTX.
Tento C# kód ukazuje, jak vytvořit obrázkový rámeček:
// Instancuje třídu Presentation, která představuje soubor PPTX
using (Presentation pres = new Presentation())
{
// Získá první snímek
ISlide slide = pres.Slides[0];
// Nahraje obrázek a přidá jej do kolekce obrázků prezentace
IImage image = Images.FromFile("aspose-logo.jpg");
IPPImage ppImage = pres.Images.AddImage(image);
image.Dispose();
// Přidá obrázkový rámeček se stejnou výškou a šířkou
IPictureFrame pictureFrame = slide.Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 150, ppImage.Width, ppImage.Height, ppImage);
// Aplikuje určité formátování na obrázkový rámeček
pictureFrame.LineFormat.FillFormat.FillType = FillType.Solid;
pictureFrame.LineFormat.FillFormat.SolidFillColor.Color = Color.Blue;
pictureFrame.LineFormat.Width = 20;
pictureFrame.Rotation = 45;
// Uloží prezentaci do souboru PPTX
pres.Save("RectPicFrameFormat_out.pptx", SaveFormat.Pptx);
}
Vytvoření obrázkového rámečku s relativní měřítkem
Úpravou relativního měřítka obrázku můžete vytvořit složitější obrázkový rámeček.
- Vytvořte instanci třídy Presentation.
- Získejte odkaz na snímek pomocí jeho indexu.
- Přidejte obrázek do kolekce obrázků prezentace.
- Vytvořte objekt IPPImage přidáním obrázku do IImagescollection přidružené k objektu prezentace, který bude použit k vyplnění tvaru.
- Zadejte relativní šířku a výšku obrázku v obrázkovém rámečku.
- Uložte upravenou prezentaci jako soubor PPTX.
Tento C# kód ukazuje, jak vytvořit obrázkový rámeček s relativním měřítkem:
// Instancuje třídu Presentation, která představuje soubor PPTX
using (Presentation presentation = new Presentation())
{
// Nahraje obrázek a přidá jej do kolekce obrázků prezentace
IImage image = Images.FromFile("aspose-logo.jpg");
IPPImage ppImage = presentation.Images.AddImage(image);
image.Dispose();
// Přidá obrázkový rámeček na snímek
IPictureFrame pictureFrame = presentation.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 50, 100, 100, ppImage);
// Nastaví relativní měřítko šířky a výšky
pictureFrame.RelativeScaleHeight = 0.8f;
pictureFrame.RelativeScaleWidth = 1.35f;
// Uloží prezentaci
presentation.Save("Adding Picture Frame with Relative Scale_out.pptx", SaveFormat.Pptx);
}
Extrahování rastrových obrázků z obrázkových rámečků
Můžete extrahovat rastrové obrázky z objektů PictureFrame a uložit je ve formátech PNG, JPG a dalších. Níže uvedený příklad kódu ukazuje, jak extrahovat obrázek z dokumentu „sample.pptx“ a uložit jej ve formátu 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);
}
}
Extrahování SVG obrázků z obrázkových rámečků
Když prezentace obsahuje SVG grafiku umístěnou uvnitř tvarů PictureFrame, Aspose.Slides pro .NET vám umožní získat původní vektorové obrázky s plnou věrností. Procházením kolekce tvarů snímku můžete identifikovat každý PictureFrame, zjistit, zda podkladový IPPImage obsahuje SVG, a poté tento obrázek uložit na disk nebo do proudu v jeho nativním SVG formátu.
Následující ukázka kódu demonstruje, jak extrahovat SVG obrázek z obrázkového rámečku:
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);
}
}
Získání průhlednosti obrázku
Aspose.Slides umožňuje získat efekt průhlednosti aplikovaný na obrázek. Tento C# kód demonstruje operaci:
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);
}
}
}
Získání jasu a kontrastu obrázku
Aspose.Slides umožňuje získat efekt jasu a kontrastu aplikovaný na obrázek. Rozhraní ILuminance představuje tento transformační efekt obrázku.
Tento C# kód ukazuje, jak získat nastavení jasu a kontrastu z obrázkového rámečku:
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);
}
}
}
Formátování obrázkového rámečku
Aspose.Slides poskytuje řadu možností formátování, které lze použít na obrázkový rámeček. Pomocí těchto možností můžete upravit obrázkový rámeček tak, aby vyhovoval konkrétním požadavkům.
- Vytvořte instanci třídy Presentation.
- Získejte odkaz na snímek pomocí jeho indexu.
- Vytvořte objekt IPPImage přidáním obrázku do IImagescollection přidružené k objektu prezentace, který bude použit k vyplnění tvaru.
- Zadejte šířku a výšku obrázku.
- Vytvořte
PictureFramena základě šířky a výšky obrázku pomocí metody AddPictureFrame, která je k dispozici u objektu IShapes přidruženého k referencovanému snímku. - Přidejte obrázkový rámeček (obsahující obrázek) na snímek.
- Nastavte barvu čáry obrázkového rámečku.
- Nastavte šířku čáry obrázkového rámečku.
- Otočte obrázkový rámeček zadáním kladné nebo záporné hodnoty.
- Kladná hodnota otáčí obrázek ve směru hodinových ručiček.
- Záporná hodnota otáčí obrázek proti směru hodinových ručiček.
- Přidejte obrázkový rámeček (obsahující obrázek) na snímek.
- Uložte upravenou prezentaci jako soubor PPTX.
Tento C# kód demonstruje proces formátování obrázkového rámečku:
// Instancuje třídu Presentation, která představuje soubor PPTX
using (Presentation presentation = new Presentation())
{
// Získá první snímek
ISlide slide = presentation.Slides[0];
// Nahraje obrázek a přidá jej do kolekce obrázků prezentace
IImage image = Images.FromFile("aspose-logo.jpg");
IPPImage ppImage = presentation.Images.AddImage(image);
image.Dispose();
// Přidá obrázkový rámeček se stejnou výškou a šířkou jako obrázek
IPictureFrame pictureFrame = slide.Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 150, ppImage.Width, ppImage.Height, ppImage);
// Aplikuje určité formátování na obrázkový rámeček
pictureFrame.LineFormat.FillFormat.FillType = FillType.Solid;
pictureFrame.LineFormat.FillFormat.SolidFillColor.Color = Color.Blue;
pictureFrame.LineFormat.Width = 20;
pictureFrame.Rotation = 45;
// Uloží prezentaci do souboru PPTX
presentation.Save("RectPicFrameFormat_out.pptx", SaveFormat.Pptx);
}
Přidání obrázku jako odkazu
Aby se zmenšila velikost prezentace, můžete přidávat obrázky (nebo videa) prostřednictvím odkazů místo vkládání souborů přímo do prezentace. Tento C# kód ukazuje, jak přidat obrázek a video do zástupce:
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);
}
Ořezávání obrázků
Tento C# kód ukazuje, jak oříznout existující obrázek na snímku:
using (Presentation presentation = new Presentation())
{
// Vytvoří nový objekt obrázku
IImage image = Images.FromFile(imagePath);
IPPImage newImage = presentation.Images.AddImage(image);
image.Dispose();
// Přidá obrázkový rámeček do snímku
IPictureFrame picFrame = presentation.Slides[0].Shapes.AddPictureFrame(
ShapeType.Rectangle, 100, 100, 420, 250, newImage);
// Ořízne obrázek (procentuální hodnoty)
picFrame.PictureFormat.CropLeft = 23.6f;
picFrame.PictureFormat.CropRight = 21.5f;
picFrame.PictureFormat.CropTop = 3;
picFrame.PictureFormat.CropBottom = 31;
// Uloží výsledek
presentation.Save("PictureFrameCrop.pptx", SaveFormat.Pptx);
}
Odstranění oříznutých oblastí obrázku v rámečku
Pokud chcete odstranit oříznuté oblasti obrázku obsaženého v rámečku, můžete použít metodu IPictureFillFormat.DeletePictureCroppedAreas. Tato metoda vrací oříznutý obrázek nebo původní obrázek, pokud ořez není potřeba.
Tento C# kód demonstruje tuto operaci:
using (Presentation presentation = new Presentation("PictureFrameCrop.pptx"))
{
ISlide slide = presentation.Slides[0];
// Získá obrázkový rámeček z prvního snímku
IPictureFrame picFrame = slide.Shapes[0] as IPictureFrame;
// Odstraní oříznuté oblasti obrázku v obrázkovém rámečku a vrátí oříznutý obrázek
IPPImage croppedImage = picFrame.PictureFormat.DeletePictureCroppedAreas();
// Uloží výsledek
presentation.Save("PictureFrameDeleteCroppedAreas.pptx", SaveFormat.Pptx);
}
NOTE
Metoda IPictureFillFormat.DeletePictureCroppedAreas přidává oříznutý obrázek do kolekce obrázků prezentace. Pokud je obrázek použit jen v zpracovávaném PictureFrame, může toto nastavení snížit velikost prezentace. V opačném případě se počet obrázků v výsledné prezentaci zvýší.
Metoda při ořezávání konvertuje WMF/EMF metafily na rastrový PNG obrázek.
Komprese obrázků
Můžete komprimovat obrázek v prezentaci pomocí metody IPictureFillFormat.CompressImage.
Tato metoda komprimuje obrázek snížením jeho velikosti podle velikosti tvaru a zadaného rozlišení s volbou odstranění oříznutých oblastí.
Upravuje velikost a rozlišení obrázku podobně jako funkce PowerPointu Formát obrázku → Komprimovat obrázky → Rozlišení.
Následující C# příklady ukazují, jak komprimovat obrázek v prezentaci zadáním cílového rozlišení a volitelným odstraněním oříznutých oblastí:
using (Presentation presentation = new Presentation("demo.pptx"))
{
ISlide slide = presentation.Slides[0];
IPictureFrame pictureFrame = slide.Shapes[0] as IPictureFrame;
// Komprimuje obrázek s cílovým rozlišením 150 DPI (webové rozlišení) a odstraní oříznuté oblasti.
bool result = pictureFrame.PictureFormat.CompressImage(true, PicturesCompression.Dpi150);
// Zkontroluje výsledek komprese.
if (result)
{
Console.WriteLine("Image successfully compressed.");
}
else
{
Console.WriteLine("Image compression failed or no changes were necessary.");
}
presentation.Save("CompressedImage.pptx", SaveFormat.Pptx);
}
Nebo použitím vlastní hodnoty DPI přímo:
using (Presentation presentation = new Presentation("demo.pptx"))
{
ISlide slide = presentation.Slides[0];
IPictureFrame pictureFrame = slide.Shapes[0] as IPictureFrame;
// Komprimuje obrázek na 150 DPI (webové rozlišení), odstraňuje oříznuté oblasti.
pictureFrame.PictureFormat.CompressImage(true, 150f);
presentation.Save("CompressedImage.pptx", SaveFormat.Pptx);
}
NOTE
Metoda konvertuje obrázek na nižší rozlišení podle velikosti tvaru a zadaného DPI. Oříznuté oblasti lze také odstranit pro optimalizaci velikosti souboru.Pokud je obrázek metafilem (WMF/EMF) nebo SVG, komprese se nepoužije. Kvalita JPEG je zachována nebo mírně snížena v závislosti na rozlišení, podobně jako PowerPoint zachází s JPEG ve vysokém rozlišení.
Uzamčení poměru stran
Pokud chcete, aby tvar obsahující obrázek zachoval svůj poměr stran i po změně rozměrů obrázku, můžete použít vlastnost IPictureFrameLock.AspectRatioLocked k nastavení volby Uzamknout poměr stran.
Tento C# kód ukazuje, jak uzamknout poměr stran tvaru:
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);
// Nastaví tvar tak, aby při změně velikosti zachoval poměr stran
pictureFrame.PictureFrameLock.AspectRatioLocked = true;
}
NOTE
Toto nastavení Uzamknout poměr stran zachovává pouze poměr stran tvaru, nikoli obrázku, který obsahuje.Použití vlastnosti StretchOff
Pomocí vlastností StretchOffsetLeft, StretchOffsetTop, StretchOffsetRight a StretchOffsetBottom z rozhraní IPictureFillFormat a třídy PictureFillFormat můžete určit výplňový obdélník.
Když je pro obrázek definováno roztažení, zdrojový obdélník se škáluje tak, aby zapadl do určeného výplňového obdélníku. Každá hrana výplňového obdélníku je definována procentuálním posunem od odpovídající hrany ohraničujícího rámečku tvaru. Kladné procento udává vnitřní odsazení, záporné procento pak vnější posun.
- Vytvořte instanci třídy Presentation.
- Získejte odkaz na snímek pomocí jeho indexu.
- Přidejte obdélník
AutoShape. - Vytvořte obrázek.
- Nastavte typ výplně tvaru.
- Nastavte režim výplně obrázkem tvaru.
- Přidejte nastavený obrázek pro výplň tvaru.
- Zadejte posuny obrázku od odpovídající hrany ohraničujícího rámečku tvaru.
- Uložte upravenou prezentaci jako soubor PPTX.
Tento C# kód demonstruje proces, ve kterém je použita vlastnost 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);
// Nastaví obrázek roztažený ze všech stran v těle tvaru
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);
}
Často kladené otázky
Jak zjistím, které formáty obrázků jsou podporovány pro PictureFrame?
Aspose.Slides podporuje jak rastrové obrázky (PNG, JPEG, BMP, GIF atd.), tak vektorové obrázky (např. SVG) prostřednictvím objektu obrázku přiřazeného k PictureFrame. Seznam podporovaných formátů obecně překrývá schopnosti enginu pro snímky a konverzi obrázků.
Jaký vliv bude mít přidání desítek velkých obrázků na velikost a výkon PPTX?
Vkládání velkých obrázků zvyšuje velikost souboru i spotřebu paměti; propojování obrázků pomáhá udržet velikost prezentace nízkou, ale vyžaduje, aby externí soubory zůstaly dostupné. Aspose.Slides poskytuje možnost přidávat obrázky pomocí odkazu ke snížení velikosti souboru.
Jak mohu uzamknout objekt obrázku před neúmyslným přesunutím/změnou velikosti?
Použijte zámky tvarů pro PictureFrame (např. zakázat přesouvání nebo změnu velikosti). Mechanismus zamykání je popsán pro tvary v samostatném článku o ochraně a je podporován pro různé typy tvarů, včetně PictureFrame.
Zachovává se vektorová věrnost SVG při exportu prezentace do PDF/obrázků?
Aspose.Slides umožňuje extrahovat SVG z PictureFrame jako původní vektor. Při exportu do PDF nebo rastrových formátů může být výsledek rasterizován podle nastavení exportu; fakt, že originální SVG je uložen jako vektor, je potvrzeno chováním při extrakci.