La conversión de archivos PostScript EPS o PS a formatos de imagen regulares es una tarea común que quizás deba realizar. Si tiene una gran cantidad de estos archivos, será más eficiente convertirlos mediante programación. A la luz de esto, este artículo le enseñará cómo convertir archivos PostScript EPS/PS a formato de imagen PNG o JPG usando C++.

API de C++ para convertir archivos PostScript EPS/PS a imágenes PNG o JPG

Aspose.Page for C++ es una biblioteca de C++ para renderizar y manipular archivos XPS y PostScript. Puede usarlo para procesar y convertir archivos XPS y EPS/PS a varios otros formatos como PDF, JPEG, BMP, TIFF, etc. Puede instalar la API a través de NuGet o descargarla directamente desde la sección descargas.

PM> Install-Package Aspose.Page.Cpp

Convierta archivos PostScript EPS/PS a formato de imagen PNG usando C++

Los siguientes son los pasos para convertir archivos EPS o PS a formato de imagen PNG.

El siguiente código de ejemplo muestra cómo convertir archivos PostScript EPS/PS a formato de imagen PNG mediante C++.

// Crear una instancia de la clase ImageFormat
System::SharedPtr<System::Drawing::Imaging::ImageFormat> imageFormat = System::Drawing::Imaging::ImageFormat::get_Png();

// Inicializar el flujo de entrada de PostScript
System::SharedPtr<System::IO::FileStream> psStream = System::MakeObject<System::IO::FileStream>(u"SourceDirectory\\inputForImage.ps", System::IO::FileMode::Open, System::IO::FileAccess::Read);

// Crear una instancia de la clase PsDocument
System::SharedPtr<PsDocument> document = System::MakeObject<PsDocument>(psStream);

// Si desea convertir un archivo Postscript a pesar de errores menores, establezca esta bandera
bool suppressErrors = true;

// Inicialice el objeto ImageSaveOptions con los parámetros necesarios.
System::SharedPtr<Aspose::Page::EPS::Device::ImageSaveOptions> options = System::MakeObject<Aspose::Page::EPS::Device::ImageSaveOptions>(suppressErrors);

// Si desea agregar una carpeta especial donde se almacenan las fuentes. La carpeta de fuentes predeterminada en el sistema operativo siempre se incluye.
options->set_AdditionalFontsFolders(System::MakeArray<System::String>({ u"{FONT_FOLDER}" }));

// El formato de imagen predeterminado es PNG y no es obligatorio configurarlo en ImageDevice
// El tamaño de imagen predeterminado es 595x842 y no es obligatorio configurarlo en ImageDevice
System::SharedPtr<Aspose::Page::EPS::Device::ImageDevice> device = System::MakeObject<Aspose::Page::EPS::Device::ImageDevice>();
// Pero si necesita especificar el tamaño y el formato de la imagen, use el constructor con parámetros
//dispositivo ImageDevice = nuevo ImageDevice(nuevo 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());
		{
			// Inicializar flujo de salida
			System::SharedPtr<System::IO::FileStream> fs = System::MakeObject<System::IO::FileStream>(imagePath, System::IO::FileMode::Create, System::IO::FileAccess::Write);

			// Borrar recursos bajo la declaración 'usando'
			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++;
	}
}

Conversión de archivos PostScript EPS/PS a formato de imagen JPG usando C++

Para convertir archivos EPS o PS a formato de imagen JPG, siga los pasos que se indican a continuación.

El siguiente código de ejemplo demuestra cómo convertir archivos PostScript EPS/PS a formato de imagen JPG usando C++.

// Inicializar el flujo de entrada de PostScript
System::SharedPtr<System::IO::FileStream> psStream = System::MakeObject<System::IO::FileStream>(u"SourceDirectory\\inputForImage.ps", System::IO::FileMode::Open, System::IO::FileAccess::Read);

// Crear una instancia de la clase PsDocument
System::SharedPtr<PsDocument> document = System::MakeObject<PsDocument>(psStream);

// Si desea convertir un archivo Postscript a pesar de errores menores, establezca esta bandera
bool suppressErrors = true;

// Inicialice el objeto ImageSaveOptions con los parámetros necesarios.
System::SharedPtr<Aspose::Page::EPS::Device::ImageSaveOptions> options = System::MakeObject<Aspose::Page::EPS::Device::ImageSaveOptions>(suppressErrors);

// Si desea agregar una carpeta especial donde se almacenan las fuentes. La carpeta de fuentes predeterminada en el sistema operativo siempre se incluye.
options->set_AdditionalFontsFolders(System::MakeArray<System::String>({ u"{FONT_FOLDER}" }));

// Crear una instancia de la clase ImageFormat
System::SharedPtr<System::Drawing::Imaging::ImageFormat> imageFormat = System::Drawing::Imaging::ImageFormat::get_Jpeg();

// El formato de imagen predeterminado es PNG y no es obligatorio configurarlo en ImageDevice
// El tamaño de imagen predeterminado es 595x842 y no es obligatorio configurarlo en ImageDevice
System::SharedPtr<Aspose::Page::EPS::Device::ImageDevice> device = System::MakeObject<Aspose::Page::EPS::Device::ImageDevice>(imageFormat);
// Pero si necesita especificar el tamaño y el formato de la imagen, use el constructor con parámetros
//dispositivo ImageDevice = nuevo ImageDevice(nuevo 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());
		{
			// Inicializar flujo de salida
			System::SharedPtr<System::IO::FileStream> fs = System::MakeObject<System::IO::FileStream>(imagePath, System::IO::FileMode::Create, System::IO::FileAccess::Write);

			// Borrar recursos bajo la declaración 'usando'
			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++;
	}
}

Obtenga una licencia gratis

Puede probar la API sin limitaciones de evaluación solicitando una licencia temporal gratuita.

Conclusión

En este artículo, ha aprendido cómo convertir archivos PostScript EPS/PS a formatos de imagen PNG y JPG usando C++. Ha visto el fragmento de código completo junto con los pasos necesarios para lograrlo. Aspose.Page for C++ proporciona muchas características adicionales que puede explorar en detalle visitando la documentación oficial. Si tiene alguna pregunta, no dude en comunicarse con nosotros en nuestro foro de soporte gratuito.

Ver también