Add Image to PDF using C#
기본적으로 JPEG 품질은 100%로 설정됩니다. 더 나은 압축과 품질을 적용하려면 다음 오버로드를 사용하세요:
- XImageCollection 클래스에 추가된 Replace 메소드 오버로드: public void Replace(int index, Stream stream, int quality)
- XImageCollection 클래스에 추가된 Add 메소드 오버로드: public void Add(Stream stream, int quality)
## 기존 PDF 파일에 이미지 추가하기 (Facades)
PDF 파일에 이미지를 추가하는 또 다른 간단한 방법도 있습니다.
PDF 파일에 이미지를 추가하는 또 다른 간단한 방법도 있습니다.
```csharp
string imageFileName = Path.Combine(_dataDir, "Images", "Sample-01.jpg");
string outputPdfFileName = Path.Combine(_dataDir, "Example-add-image-mender.pdf");
Document document = new Document();
Page page = document.Pages.Add();
page.SetPageSize(PageSize.A3.Height, PageSize.A3.Width);
page = document.Pages.Add();
Aspose.Pdf.Facades.PdfFileMend mender = new Aspose.Pdf.Facades.PdfFileMend(document);
mender.AddImage(imageFileName, 1, 0, 0, (float)page.CropBox.Width, (float)page.CropBox.Height);
document.Save(outputPdfFileName);
```
## 페이지에 이미지 배치하고 종횡비를 유지(제어)하기
이미지의 크기를 모를 경우 페이지에 왜곡된 이미지가 나타날 수 있습니다. 다음 예제는 이를 피하는 방법 중 하나를 보여줍니다.
```csharp
public static void AddingImageAndPreserveAspectRatioIntoPDF()
{
var bitmap = System.Drawing.Image.FromFile(_dataDir + "3410492.jpg");
int width;
int height;
width = bitmap.Width;
height = bitmap.Height;
var document = new Aspose.Pdf.Document();
var page = document.Pages.Add();
int scaledWidth = 400;
int scaledHeight = scaledWidth * height / width;
page.AddImage(_dataDir + "3410492.jpg", new Aspose.Pdf.Rectangle(10, 10, scaledWidth, scaledHeight));
document.Save(_dataDir + "sample_image.pdf");
}
```
## PDF 내 이미지가 컬러인지 흑백인지 확인하기
이미지 크기를 줄이기 위해 다양한 종류의 압축을 적용할 수 있습니다. 이미지에 적용되는 압축 유형은 원본 이미지의 ColorSpace에 따라 다릅니다. 즉, 이미지가 컬러(RGB)인 경우 JPEG2000 압축을 적용하고, 흑백인 경우 JBIG2/JBIG2000 압축을 적용해야 합니다. 따라서 각 이미지 유형을 식별하고 적절한 압축 유형을 사용하는 것이 최적의 결과를 만들어냅니다.
PDF 파일에는 텍스트, 이미지, 그래프, 첨부 파일, 주석 등의 요소가 포함될 수 있으며, 원본 PDF 파일에 이미지가 포함되어 있는 경우 이미지의 색상 공간을 확인하고 이미지 압축을 적용하여 PDF 파일 크기를 줄일 수 있습니다. 다음 코드 조각은 PDF 내 이미지가 컬러인지 흑백인지 식별하는 단계를 보여줍니다.
```csharp
// 완전한 예제와 데이터 파일은 https://github.com/aspose-pdf/Aspose.PDF-for-.NET 에서 확인해주세요.
// 문서 디렉토리 경로입니다.
string dataDir = RunExamples.GetDataDir_AsposePdf_Images();
// 회색조 이미지 카운터
int grayscaled = 0;
// RGB 이미지 카운터
int rgd = 0;
using (Document document = new Document(dataDir + "ExtractImages.pdf"))
{
foreach (Page page in document.Pages)
{
Console.WriteLine("--------------------------------");
ImagePlacementAbsorber abs = new ImagePlacementAbsorber();
page.Accept(abs);
// 특정 페이지에서 이미지 개수 가져오기
Console.WriteLine("Total Images = {0} over page number {1}", abs.ImagePlacements.Count, page.Number);
// Document.Pages[29].Accept(abs);
int image_counter = 1;
foreach (ImagePlacement ia in abs.ImagePlacements)
{
ColorType colorType = ia.Image.GetColorType();
switch (colorType)
{
case ColorType.Grayscale:
++grayscaled;
Console.WriteLine("Image {0} is GrayScale...", image_counter);
break;
case ColorType.Rgb:
++rgd;
Console.WriteLine("Image {0} is RGB...", image_counter);
break;
}
image_counter += 1;
}
}
}
```
## 이미지 품질 제어
PDF 파일에 추가되는 이미지의 품질을 제어할 수 있습니다. [XImageCollection](https://reference.aspose.com/pdf/net/aspose.pdf/ximagecollection) 클래스의 [Replace](https://reference.aspose.com/pdf/net/aspose.pdf.ximagecollection/replace/methods/1) 메소드를 사용하세요.
다음 코드 스니펫은 모든 문서 이미지를 80% 품질로 압축하는 JPEG로 변환하는 방법을 보여줍니다.
```csharp
Aspose.PDF.Document pdfDocument = new Aspose.PDF.Document(inFile);
foreach (Aspose.PDF.Page page in pdfDocument.Pages)
{
int idx = 1;
foreach (Aspose.PDF.XImage image in page.Resources.Images)
{
using (MemoryStream imageStream = new MemoryStream())
{
image.Save(imageStream, System.Drawing.Imaging.ImageFormat.Jpeg);
page.Resources.Images.Replace(idx, imageStream, 80);
idx = idx + 1;
}
}
}
// pdfDocument.OptimizeResources();
pdfDocument.Save(outFile);
```