Képkeretek kezelése prezentációkban .NET-ben
Bevezetés
A képkeret egy olyan alakzat, amely képet tartalmaz — olyan, mint egy kép keretben.
Képet egy diára a képkereten keresztül adhatunk hozzá. Így a kép formázása a képkeret formázásával történik.
Tipp
Az Aspose ingyenes konvertereket kínál — JPEG‑t PowerPoint‑ba és PNG‑t PowerPoint‑ba — amelyek lehetővé teszik a felhasználók számára, hogy gyorsan prezentációkat hozzanak létre képekből.Képkeret létrehozása
- Hozzon létre egy példányt a Prezentáció osztályból.
- Szerezze meg egy dia hivatkozását az indexe alapján.
- Hozzon létre egy IPPImage objektumot úgy, hogy képet ad hozzá a prezentáció objektumhoz kapcsolódó IImagescollection gyűjteményhez, amelyet az alakzat kitöltésére használnak.
- Adja meg a kép szélességét és magasságát.
- Hozzon létre egy PictureFrame objektumot a kép szélessége és magassága alapján a
AddPictureFramemódszerrel, amely a hivatkozott diához kapcsolódó alakzatobjektumon keresztül érhető el. - Adjon hozzá egy képkeretet (a képet tartalmazó) a diához.
- Írja ki a módosított prezentációt PPTX fájlként.
// Példányosítja a Presentation osztályt, amely PPTX fájlt képvisel
using (Presentation pres = new Presentation())
{
// Lekéri az első diát
ISlide slide = pres.Slides[0];
// Betölt egy képet, és hozzáadja a prezentáció képgyűjteményéhez
IImage image = Images.FromFile("aspose-logo.jpg");
IPPImage ppImage = pres.Images.AddImage(image);
image.Dispose();
// Hozzáad egy képkeretet ugyanazzal a magassággal és szélességgel
IPictureFrame pictureFrame = slide.Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 150, ppImage.Width, ppImage.Height, ppImage);
// Alkalmaz némi formázást a képkeretre
pictureFrame.LineFormat.FillFormat.FillType = FillType.Solid;
pictureFrame.LineFormat.FillFormat.SolidFillColor.Color = Color.Blue;
pictureFrame.LineFormat.Width = 20;
pictureFrame.Rotation = 45;
// Elmenti a prezentációt egy PPTX fájlba
pres.Save("RectPicFrameFormat_out.pptx", SaveFormat.Pptx);
}
Képkeret létrehozása relatív méretezéssel
- Hozzon létre egy példányt a Prezentációosztályból.
- Szerezze meg egy dia hivatkozását az indexe alapján.
- Adjon hozzá egy képet a prezentáció képgyűjteményéhez.
- Hozzon létre egy IPPImage objektumot úgy, hogy képet ad hozzá a prezentáció objektumhoz kapcsolódó IImagescollection gyűjteményhez, amelyet az alakzat kitöltésére használnak.
- Adja meg a kép relatív szélességét és magasságát a képkeretben.
- Írja ki a módosított prezentációt PPTX fájlként.
// Példányosítja a Presentation osztályt, amely PPTX fájlt képvisel
using (Presentation presentation = new Presentation())
{
// Betölt egy képet, és hozzáadja a prezentáció képgyűjteményéhez
IImage image = Images.FromFile("aspose-logo.jpg");
IPPImage ppImage = presentation.Images.AddImage(image);
image.Dispose();
// Hozzáad egy képkeretet a diához
IPictureFrame pictureFrame = presentation.Slides[0].Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 50, 100, 100, ppImage);
// Beállítja a relatív méretezés szélességét és magasságát
pictureFrame.RelativeScaleHeight = 0.8f;
pictureFrame.RelativeScaleWidth = 1.35f;
// Elmenti a prezentációt
presentation.Save("Adding Picture Frame with Relative Scale_out.pptx", SaveFormat.Pptx);
}
Raszteres képek kinyerése képkeretekből
Képet kinyerhet a PictureFrame objektumokból, és elmentheti PNG, JPG vagy más formátumban. Az alábbi kódrészlet bemutatja, hogyan nyerhet ki egy képet a „sample.pptx” dokumentumból, és mentheti PNG formátumban.
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 képek kinyerése képkeretekből
Amikor egy prezentáció SVG grafikákat tartalmaz, amelyeket PictureFrame alakzatokba ágyaztak, az Aspose.Slides for .NET lehetővé teszi az eredeti vektoros képek teljes hűségű visszanyerését. A dia alakzatgyűjteményének bejárásával azonosíthatja az egyes PictureFrame objektumokat, ellenőrizheti, hogy a mögöttes IPPImage SVG tartalmat hordoz‑e, majd elmentheti az eredeti SVG formátumban lemezre vagy streambe.
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);
}
}
Kép átlátszóságának lekérdezése
Az Aspose.Slides lehetővé teszi a képre alkalmazott átlátszósági effektus lekérdezését. Ez a C# kód mutatja a műveletet:
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);
}
}
}
Kép fényerőnek és kontrasztnak a lekérdezése
Az Aspose.Slides lehetővé teszi a képre alkalmazott fényerő‑ és kontraszt‑effektus lekérdezését. Az ILuminance interfész képviseli ezt a képtranszformációs hatást.
Ez a C# kód bemutatja, hogyan kérdezhetők le a fényerő‑ és kontraszt‑beállítások egy képkeretből:
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);
}
}
}
Képkeret formázása
Az Aspose.Slides számos formázási lehetőséget biztosít, amelyeket egy képkeretre alkalmazhat. Ezekkel a beállításokkal a képkeretet a kívánt követelményekhez igazíthatja.
- Hozzon létre egy példányt a Presentationosztályból.
- Szerezze meg egy dia hivatkozását az indexe alapján.
- Hozzon létre egy IPPImage objektumot úgy, hogy képet ad hozzá a IImagescollection gyűjteményhez, amelyet a prezentáció objektum használ a forma kitöltéséhez.
- Adja meg a kép szélességét és magasságát.
- Hozzon létre egy
PictureFrame‑et a kép szélessége és magassága alapján a AddPictureFrame módszerrel, amely a IShapes objektumon keresztül érhető el a hivatkozott dián. - Adja hozzá a képkeretet (a képet tartalmazó) a diához.
- Állítsa be a képkeret vonalszínét.
- Állítsa be a képkeret vonalszélességét.
- Forgassa el a képkeretet pozitív vagy negatív érték megadásával.
- A pozitív érték az alakzatot az óramutató járásával megegyező irányba forgat.
- A negatív érték az óramutató járásával ellentétes irányba forgat.
- Adja hozzá a képkeretet (a képet tartalmazó) a diához.
- Írja ki a módosított prezentációt PPTX fájlként.
// Példányosítja a Presentation osztályt, amely PPTX fájlt képvisel
using (Presentation presentation = new Presentation())
{
// Lekéri az első diát
ISlide slide = presentation.Slides[0];
// Betölt egy képet, és hozzáadja a prezentáció képgyűjteményéhez
IImage image = Images.FromFile("aspose-logo.jpg");
IPPImage ppImage = presentation.Images.AddImage(image);
image.Dispose();
// Hozzáad egy képkeretet a kép ekvivalens magasságával és szélességével
IPictureFrame pictureFrame = slide.Shapes.AddPictureFrame(ShapeType.Rectangle, 50, 150, ppImage.Width, ppImage.Height, ppImage);
// Alkalmaz némi formázást a képkeretre
pictureFrame.LineFormat.FillFormat.FillType = FillType.Solid;
pictureFrame.LineFormat.FillFormat.SolidFillColor.Color = Color.Blue;
pictureFrame.LineFormat.Width = 20;
pictureFrame.Rotation = 45;
// Elmenti a prezentációt PPTX fájlba
presentation.Save("RectPicFrameFormat_out.pptx", SaveFormat.Pptx);
}
Kép hozzáadása linkként
A nagy prezentációs méretek elkerülése érdekében a képeket (vagy videókat) linkeken keresztül adhatja hozzá a beágyazás helyett. Ez a C# kód bemutatja, hogyan adhat képet és videót egy helyőrzőhöz:
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);
}
Képek vágása
Ez a C# kód bemutatja, hogyan vághat le egy meglévő képet egy dián:
using (Presentation presentation = new Presentation())
{
// Létrehozza az új kép objektumot
IImage image = Images.FromFile(imagePath);
IPPImage newImage = presentation.Images.AddImage(image);
image.Dispose();
// Hozzáad egy PictureFrame-et egy diához
IPictureFrame picFrame = presentation.Slides[0].Shapes.AddPictureFrame(
ShapeType.Rectangle, 100, 100, 420, 250, newImage);
// Levágja a képet (százalékos értékek)
picFrame.PictureFormat.CropLeft = 23.6f;
picFrame.PictureFormat.CropRight = 21.5f;
picFrame.PictureFormat.CropTop = 3;
picFrame.PictureFormat.CropBottom = 31;
// Elmenti az eredményt
presentation.Save("PictureFrameCrop.pptx", SaveFormat.Pptx);
}
Kivágott területek törlése képből
Ha a keretben lévő kép kivágott részeit szeretné törölni, használja az IPictureFillFormat.DeletePictureCroppedAreas metódust. A metódus visszaadja a kivágott képet, vagy az eredeti képet, ha a vágás nem szükséges.
using (Presentation presentation = new Presentation("PictureFrameCrop.pptx"))
{
ISlide slide = presentation.Slides[0];
// Lekéri a PictureFrame-et az első diáról
IPictureFrame picFrame = slide.Shapes[0] as IPictureFrame;
// Törli a PictureFrame kép kivágott területeit és visszaadja a kivágott képet
IPPImage croppedImage = picFrame.PictureFormat.DeletePictureCroppedAreas();
// Elmenti az eredményt
presentation.Save("PictureFrameDeleteCroppedAreas.pptx", SaveFormat.Pptx);
}
MEGJEGYZÉS
Az IPictureFillFormat.DeletePictureCroppedAreas metódus hozzáadja a kivágott képet a prezentáció képgyűjteményéhez. Ha a képet csak a feldolgozott PictureFrame használja, ez a beállítás csökkentheti a prezentáció méretét. Ellenkező esetben a keletkező prezentációban a képek száma növekedni fog.
Ez a metódus a vágási művelet során a WMF/EMF metafájlokat raszteres PNG képpé konvertálja.
Képek tömörítése
Képet tömöríthet egy prezentációban az IPictureFillFormat.CompressImage metódussal.
Ez a metódus a kép méretét csökkenti a forma mérete és a megadott felbontás alapján, lehetővé téve a kivágott területek törlését is.
A módszer úgy módosítja a kép méretét és felbontását, mint a PowerPoint Képformátum → Képek tömörítése → Felbontás funkciója.
Az alábbi C# példák bemutatják, hogyan tömöríthet egy képet a prezentációban egy célfelbontás megadásával, és opcionálisan a kivágott területek eltávolításával:
using (Presentation presentation = new Presentation("demo.pptx"))
{
ISlide slide = presentation.Slides[0];
IPictureFrame pictureFrame = slide.Shapes[0] as IPictureFrame;
// Tömöríti a képet 150 DPI (web felbontás) célfelbontással, és eltávolítja a kivágott területeket.
bool result = pictureFrame.PictureFormat.CompressImage(true, PicturesCompression.Dpi150);
// Check the result of the compression.
if (result)
{
Console.WriteLine("Image successfully compressed.");
}
else
{
Console.WriteLine("Image compression failed or no changes were necessary.");
}
presentation.Save("CompressedImage.pptx", SaveFormat.Pptx);
}
Vagy egy egyéni DPI‑érték közvetlen használatával:
using (Presentation presentation = new Presentation("demo.pptx"))
{
ISlide slide = presentation.Slides[0];
IPictureFrame pictureFrame = slide.Shapes[0] as IPictureFrame;
// Tömöríti a képet 150 DPI (web felbontás) méretre, eltávolítva a kivágott területeket.
pictureFrame.PictureFormat.CompressImage(true, 150f);
presentation.Save("CompressedImage.pptx", SaveFormat.Pptx);
}
MEGJEGYZÉS
A metódus a képet alacsonyabb felbontásra konvertálja a forma mérete és a megadott DPI alapján. A kivágott területek törlése is optimalizálja a fájlméretet.Ha a kép metafájl (WMF/EMF) vagy SVG, a tömörítés nem kerül alkalmazásra. A JPEG minősége a felbontás függvényében marad vagy enyhén csökken, hasonlóan a PowerPoint viselkedéséhez.
Oldalarány zárolása
Ha egy képet tartalmazó alakzatnak meg szeretné tartani az oldalarányát akkor is, ha a kép mérete változik, használhatja az IPictureFrameLock.AspectRatioLocked tulajdonságot az Oldalarány zárolása beállításhoz.
Ez a C# kód megmutatja, hogyan zárolhatja egy alakzat oldalarányát:
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);
// Beállítja a formát, hogy az átméretezéskor megtartsa az oldalarányt
pictureFrame.PictureFrameLock.AspectRatioLocked = true;
}
MEGJEGYZÉS
Ez az Oldalarány zárolása beállítás csak az alakzat oldalarányát őrzi meg, nem a benne lévő képet.A StretchOff tulajdonság használata
A StretchOffsetLeft, StretchOffsetTop, StretchOffsetRight és StretchOffsetBottom tulajdonságokat az IPictureFillFormat interfész és a PictureFillFormat osztály segítségével megadhatja egy kitöltő téglalapként.
Ha egy kép nyújtása meg van adva, egy forrástéglalap skálázódik, hogy illeszkedjen a megadott kitöltő téglalapba. A kitöltő téglalap minden élét a forma körülhatároló keretének megfelelő élétől számított százalékos eltolás határozza meg. A pozitív százalék belső eltolást, a negatív százalék külső eltolást jelent.
- Hozzon létre egy példányt a Presentationosztályból.
- Szerezze meg egy dia hivatkozását az indexe alapján.
- Adjon hozzá egy
AutoShapetéglalapot. - Hozzon létre egy képet.
- Állítsa be az alakzat kitöltési típusát.
- Állítsa be az alakzat képkitöltési módját.
- Adjon meg egy képet a forma kitöltéséhez.
- Adja meg a kép eltolásait a forma körülhatároló keretének megfelelő élhez képest.
- Írja ki a módosított prezentációt PPTX fájlként.
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);
// Beállítja a képet, hogy minden oldalról nyújtott legyen a forma testében
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);
}
GYIK
Hogyan tudom megtudni, mely képformátumok támogatottak a PictureFrame‑hez?
Az Aspose.Slides támogatja a raszteres képeket (PNG, JPEG, BMP, GIF stb.) és a vektoros képeket (például SVG) a PictureFrame‑hez rendelt képobjektumon keresztül. A támogatott formátumok listája általában átfedésben van a dia- és képkonverziós motor képességeivel.
Hogyan befolyásolja a több tucat nagy kép PPTX méretét és teljesítményét?
A nagy képek beágyazása növeli a fájlméretet és a memóriahasználatot; a képek linkkel való hozzáadása segít csökkenteni a prezentáció méretét, de az külső fájloknak elérhetőnek kell maradniuk. Az Aspose.Slides lehetővé teszi a képek linkkel való hozzáadását a fájlméret csökkentése érdekében.
Hogyan zárolhatok egy képobjektumot a véletlen mozgatás/átméretezés ellen?
Használjon alakzatzárolásokat egy PictureFrame számára (például a mozgatás vagy átméretezés letiltása). A zárolási mechanizmust külön védelmi cikk ismerteti, és több alakzattípusra is vonatkozik, beleértve a PictureFrame elemeket is.
Megmarad-e az SVG vektorhűség, ha a prezentációt PDF‑be vagy képekbe exportálom?
Az Aspose.Slides lehetővé teszi egy SVG kinyerését egy PictureFrame‑ből eredeti vektorként. PDF‑re vagy raszteres formátumokra (PDF vagy PNG) exportálás esetén az eredmény rasterizálódhat a kimeneti beállításoktól függően; a kinyerési viselkedés megerősíti, hogy az eredeti SVG vektor marad.