Перетворення файлів PostScript EPS або PS у звичайні формати зображень є типовим завданням, яке вам може знадобитися виконати. Якщо у вас велика кількість таких файлів, ефективніше буде конвертувати їх програмним шляхом. Зважаючи на це, ця стаття навчить вас конвертувати файли PostScript EPS/PS у формат зображення PNG або JPG за допомогою C++.

C++ API для перетворення файлів PostScript EPS/PS на зображення PNG або JPG

Aspose.Page for C++ — це бібліотека C++ для рендерингу та обробки файлів XPS і PostScript. Ви можете використовувати його для обробки та конвертації файлів XPS і EPS/PS у декілька інших форматів, наприклад PDF, JPEG, BMP, TIFF тощо. Ви можете встановити API через NuGet або завантажити його безпосередньо з розділу завантажень.

PM> Install-Package Aspose.Page.Cpp

Перетворіть файли PostScript EPS/PS у формат зображення PNG за допомогою C++

Нижче наведено кроки для перетворення файлів EPS або PS у формат зображення PNG.

  • Ініціалізувати вхідний потік PostScript.
  • Створіть екземпляр класу PsDocument за допомогою вхідного потоку.
  • Створіть екземпляр об’єкта класу ImageSaveOptions.
  • Створіть екземпляр класу ImageDevice.
  • Збережіть файл PostScript на ImageDevice за допомогою PsDocument->Save(System::SharedPtr)Aspose::Page::Device пристрій, System::SharedPtr варіанти) метод.
  • Отримайте байти зображення за допомогою методу ImageDevice->getImagesBytes().
  • Перебір байтів зображення.
  • Ініціалізуйте вихідний потік і збережіть зображення PNG.

У наведеному нижче прикладі коду показано, як конвертувати файли PostScript EPS/PS у формат зображення PNG за допомогою C++.

// Створіть екземпляр класу ImageFormat
System::SharedPtr<System::Drawing::Imaging::ImageFormat> imageFormat = System::Drawing::Imaging::ImageFormat::get_Png();

// Ініціалізувати вхідний потік PostScript
System::SharedPtr<System::IO::FileStream> psStream = System::MakeObject<System::IO::FileStream>(u"SourceDirectory\\inputForImage.ps", System::IO::FileMode::Open, System::IO::FileAccess::Read);

// Створіть екземпляр класу PsDocument
System::SharedPtr<PsDocument> document = System::MakeObject<PsDocument>(psStream);

// Якщо ви хочете конвертувати файл Postscript, незважаючи на незначні помилки, установіть цей прапорець
bool suppressErrors = true;

// Ініціалізуйте об'єкт ImageSaveOptions необхідними параметрами.
System::SharedPtr<Aspose::Page::EPS::Device::ImageSaveOptions> options = System::MakeObject<Aspose::Page::EPS::Device::ImageSaveOptions>(suppressErrors);

// Якщо ви хочете додати спеціальну папку, де зберігаються шрифти. Стандартна папка шрифтів в ОС завжди включена.
options->set_AdditionalFontsFolders(System::MakeArray<System::String>({ u"{FONT_FOLDER}" }));

// Стандартним форматом зображення є PNG, і його необов’язково встановлювати в ImageDevice
// Розмір зображення за замовчуванням становить 595x842, і його необов’язково встановлювати в ImageDevice
System::SharedPtr<Aspose::Page::EPS::Device::ImageDevice> device = System::MakeObject<Aspose::Page::EPS::Device::ImageDevice>();
// Але якщо вам потрібно вказати розмір і формат зображення, використовуйте конструктор з параметрами
//ImageDevice device = new ImageDevice(new System.Drawing.Size(595, 842), System.Drawing.Imaging.ImageFormat.Jpeg);

{
	auto __finally_guard_0 = ::System::MakeScopeGuard([&psStream]()
		{
			psStream->Close();
		});

	try
	{
		document->Save(device, options);
	}
	catch (...)
	{
		throw;
	}
}

System::ArrayPtr<System::ArrayPtr<uint8_t>> imagesBytes = device->get_ImagesBytes();

int32_t i = 0;

{
	for (System::ArrayPtr<uint8_t> imageBytes : imagesBytes)
	{
		System::String imagePath = System::IO::Path::GetFullPath(System::String(u"OutputDirectory\\out_image") + System::Convert::ToString(i) + u"." + System::ObjectExt::ToString(imageFormat).ToLower());
		{
			// Ініціалізувати вихідний потік
			System::SharedPtr<System::IO::FileStream> fs = System::MakeObject<System::IO::FileStream>(imagePath, System::IO::FileMode::Create, System::IO::FileAccess::Write);

			// Очищення ресурсів під оператором «використання».
			System::Details::DisposeGuard<1> __dispose_guard_1({ fs });
			// ----------------------------------------------

			try
			{
				fs->Write(imageBytes, 0, imageBytes->get_Length());
			}
			catch (...)
			{
				__dispose_guard_1.SetCurrentException(std::current_exception());
			}
		}
		i++;
	}
}

Перетворення файлів PostScript EPS/PS у формат зображення JPG за допомогою C++

Щоб конвертувати файли EPS або PS у формат зображення JPG, виконайте наведені нижче дії.

  • Ініціалізувати вхідний потік PostScript.
  • Створіть екземпляр класу PsDocument за допомогою вхідного потоку.
  • Створіть екземпляр класу ImageSaveOptions.
  • Створіть екземпляр об’єкта класу ImageFormat.
  • Створіть екземпляр класу ImageDevice за допомогою об’єкта ImageFormat.
  • Збережіть файл PostScript на ImageDevice за допомогою PsDocument->Save(System::SharedPtr)Aspose::Page::Device пристрій, System::SharedPtr варіанти) метод.
  • Отримайте байти зображення за допомогою методу ImageDevice->getImagesBytes().
  • Перебір байтів зображення.
  • Ініціалізуйте вихідний потік і збережіть зображення JPG.

Наведений нижче приклад коду демонструє, як конвертувати файли PostScript EPS/PS у формат зображення JPG за допомогою C++.

// Ініціалізувати вхідний потік PostScript
System::SharedPtr<System::IO::FileStream> psStream = System::MakeObject<System::IO::FileStream>(u"SourceDirectory\\inputForImage.ps", System::IO::FileMode::Open, System::IO::FileAccess::Read);

// Створіть екземпляр класу PsDocument
System::SharedPtr<PsDocument> document = System::MakeObject<PsDocument>(psStream);

// Якщо ви хочете конвертувати файл Postscript, незважаючи на незначні помилки, установіть цей прапорець
bool suppressErrors = true;

// Ініціалізуйте об'єкт ImageSaveOptions необхідними параметрами.
System::SharedPtr<Aspose::Page::EPS::Device::ImageSaveOptions> options = System::MakeObject<Aspose::Page::EPS::Device::ImageSaveOptions>(suppressErrors);

// Якщо ви хочете додати спеціальну папку, де зберігаються шрифти. Стандартна папка шрифтів в ОС завжди включена.
options->set_AdditionalFontsFolders(System::MakeArray<System::String>({ u"{FONT_FOLDER}" }));

// Створіть екземпляр класу ImageFormat
System::SharedPtr<System::Drawing::Imaging::ImageFormat> imageFormat = System::Drawing::Imaging::ImageFormat::get_Jpeg();

// Стандартним форматом зображення є PNG, і його необов’язково встановлювати в ImageDevice
// Розмір зображення за замовчуванням становить 595x842, і його необов’язково встановлювати в ImageDevice
System::SharedPtr<Aspose::Page::EPS::Device::ImageDevice> device = System::MakeObject<Aspose::Page::EPS::Device::ImageDevice>(imageFormat);
// Але якщо вам потрібно вказати розмір і формат зображення, використовуйте конструктор з параметрами
//ImageDevice device = new ImageDevice(new System.Drawing.Size(595, 842), System.Drawing.Imaging.ImageFormat.Jpeg);

{
	auto __finally_guard_0 = ::System::MakeScopeGuard([&psStream]()
		{
			psStream->Close();
		});

	try
	{
		document->Save(device, options);
	}
	catch (...)
	{
		throw;
	}
}

System::ArrayPtr<System::ArrayPtr<uint8_t>> imagesBytes = device->get_ImagesBytes();

int32_t i = 0;

{
	for (System::ArrayPtr<uint8_t> imageBytes : imagesBytes)
	{
		System::String imagePath = System::IO::Path::GetFullPath(System::String(u"OutputDirectory\\out_image") + System::Convert::ToString(i) + u"." + System::ObjectExt::ToString(imageFormat).ToLower());
		{
			// Ініціалізувати вихідний потік
			System::SharedPtr<System::IO::FileStream> fs = System::MakeObject<System::IO::FileStream>(imagePath, System::IO::FileMode::Create, System::IO::FileAccess::Write);

			// Очищення ресурсів під оператором «використання».
			System::Details::DisposeGuard<1> __dispose_guard_1({ fs });
			// ----------------------------------------------

			try
			{
				fs->Write(imageBytes, 0, imageBytes->get_Length());
			}
			catch (...)
			{
				__dispose_guard_1.SetCurrentException(std::current_exception());
			}
		}
		i++;
	}
}

Отримайте безкоштовну ліцензію

Ви можете спробувати API без обмежень щодо оцінки, надіславши запит на безкоштовну тимчасову ліцензію.

Висновок

У цій статті ви дізналися, як конвертувати файли PostScript EPS/PS у формати зображень PNG і JPG за допомогою C++. Ви бачили повний фрагмент коду разом із кроками, необхідними для цього. Aspose.Page for C++ надає багато додаткових функцій, які ви можете детально вивчити, відвідавши офіційну документацію. У разі будь-яких запитань зв’яжіться з нами на нашому безкоштовному форумі підтримки.

Дивись також