Att konvertera PostScript EPS- eller PS-filer till vanliga bildformat är en vanlig uppgift som du kan behöva göra. Om du har ett stort antal sådana filer blir det mer effektivt att konvertera dem programmatiskt. Mot bakgrund av detta kommer den här artikeln att lära dig hur du konverterar PostScript EPS/PS-filer till PNG- eller JPG-bildformat med C++.
- C++ API för att konvertera PostScript EPS/PS-filer till PNG- eller JPG-bilder
- Konvertera PostScript EPS/PS-filer till PNG-bildformat med C++
- Konvertera PostScript EPS/PS-filer till JPG-bildformat med C++
C++ API för att konvertera PostScript EPS/PS-filer till PNG- eller JPG-bilder
Aspose.Page for C++ är ett C++-bibliotek för att rendera och manipulera XPS- och PostScript-filer. Du kan använda den för att bearbeta och konvertera XPS- och EPS/PS-filer till flera andra format som PDF, JPEG, BMP, TIFF, etc. Du kan antingen installera API:t genom NuGet eller ladda ner det direkt från avsnittet downloads.
PM> Install-Package Aspose.Page.Cpp
Konvertera PostScript EPS/PS-filer till PNG-bildformat med C++
Följande är stegen för att konvertera EPS- eller PS-filer till PNG-bildformat.
- Initiera PostScript-indataströmmen.
- Skapa en instans av klassen PsDocument med hjälp av indataströmmen.
- Instantiera ett objekt i klassen ImageSaveOptions.
- Skapa en instans av klassen ImageDevice.
- Spara PostScript-filen till ImageDevice med hjälp av PsDocument->Save(System::SharedPtr)Aspose::Page::Device enhet, System::SharedPtr alternativ) metod.
- Hämta bildbyten med metoden ImageDevice->getImagesBytes().
- Iterera genom bildbyte.
- Initiera utdataströmmen och spara PNG-bilden.
Följande exempelkod visar hur man konverterar PostScript EPS/PS-filer till PNG-bildformat med C++.
// Skapa en instans av klassen ImageFormat
System::SharedPtr<System::Drawing::Imaging::ImageFormat> imageFormat = System::Drawing::Imaging::ImageFormat::get_Png();
// Initiera PostScript-indataström
System::SharedPtr<System::IO::FileStream> psStream = System::MakeObject<System::IO::FileStream>(u"SourceDirectory\\inputForImage.ps", System::IO::FileMode::Open, System::IO::FileAccess::Read);
// Skapa en instans av klassen PsDocument
System::SharedPtr<PsDocument> document = System::MakeObject<PsDocument>(psStream);
// Om du vill konvertera Postscript-fil trots mindre fel, ställ in denna flagga
bool suppressErrors = true;
// Initiera ImageSaveOptions-objekt med nödvändiga parametrar.
System::SharedPtr<Aspose::Page::EPS::Device::ImageSaveOptions> options = System::MakeObject<Aspose::Page::EPS::Device::ImageSaveOptions>(suppressErrors);
// Om du vill lägga till en speciell mapp där teckensnitt lagras. Mappen för standardteckensnitt i OS ingår alltid.
options->set_AdditionalFontsFolders(System::MakeArray<System::String>({ u"{FONT_FOLDER}" }));
// Standardbildformatet är PNG och det är inte obligatoriskt att ställa in det i ImageDevice
// Standardbildstorleken är 595x842 och det är inte obligatoriskt att ställa in den i ImageDevice
System::SharedPtr<Aspose::Page::EPS::Device::ImageDevice> device = System::MakeObject<Aspose::Page::EPS::Device::ImageDevice>();
// Men om du behöver ange storlek och bildformat, använd konstruktor med parametrar
//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());
{
// Initiera utdataström
System::SharedPtr<System::IO::FileStream> fs = System::MakeObject<System::IO::FileStream>(imagePath, System::IO::FileMode::Create, System::IO::FileAccess::Write);
// Rensa resurser under "använder" uttalande
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++;
}
}
Konvertera PostScript EPS/PS-filer till JPG-bildformat med C++
För att konvertera EPS- eller PS-filer till JPG-bildformat, använd stegen nedan.
- Initiera PostScript-indataströmmen.
- Skapa en instans av klassen PsDocument med hjälp av indataströmmen.
- Skapa en instans av klassen ImageSaveOptions.
- Instantiera ett objekt i klassen ImageFormat.
- Skapa en instans av klassen ImageDevice med hjälp av objektet ImageFormat.
- Spara PostScript-filen till ImageDevice med hjälp av PsDocument->Save(System::SharedPtr)Aspose::Page::Device enhet, System::SharedPtr alternativ) metod.
- Hämta bildbytes med metoden ImageDevice->getImagesBytes().
- Iterera genom bildbyte.
- Initiera utdataströmmen och spara JPG-bilden.
Följande exempelkod visar hur man konverterar PostScript EPS/PS-filer till JPG-bildformat med C++.
// Initiera PostScript-indataström
System::SharedPtr<System::IO::FileStream> psStream = System::MakeObject<System::IO::FileStream>(u"SourceDirectory\\inputForImage.ps", System::IO::FileMode::Open, System::IO::FileAccess::Read);
// Skapa en instans av klassen PsDocument
System::SharedPtr<PsDocument> document = System::MakeObject<PsDocument>(psStream);
// Om du vill konvertera Postscript-fil trots mindre fel, ställ in denna flagga
bool suppressErrors = true;
// Initiera ImageSaveOptions-objekt med nödvändiga parametrar.
System::SharedPtr<Aspose::Page::EPS::Device::ImageSaveOptions> options = System::MakeObject<Aspose::Page::EPS::Device::ImageSaveOptions>(suppressErrors);
// Om du vill lägga till en speciell mapp där teckensnitt lagras. Mappen för standardteckensnitt i OS ingår alltid.
options->set_AdditionalFontsFolders(System::MakeArray<System::String>({ u"{FONT_FOLDER}" }));
// Skapa en instans av klassen ImageFormat
System::SharedPtr<System::Drawing::Imaging::ImageFormat> imageFormat = System::Drawing::Imaging::ImageFormat::get_Jpeg();
// Standardbildformatet är PNG och det är inte obligatoriskt att ställa in det i ImageDevice
// Standardbildstorleken är 595x842 och det är inte obligatoriskt att ställa in den i ImageDevice
System::SharedPtr<Aspose::Page::EPS::Device::ImageDevice> device = System::MakeObject<Aspose::Page::EPS::Device::ImageDevice>(imageFormat);
// Men om du behöver ange storlek och bildformat, använd konstruktor med parametrar
//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());
{
// Initiera utdataström
System::SharedPtr<System::IO::FileStream> fs = System::MakeObject<System::IO::FileStream>(imagePath, System::IO::FileMode::Create, System::IO::FileAccess::Write);
// Rensa resurser under "använder" uttalande
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++;
}
}
Skaffa en gratis licens
Du kan prova API utan utvärderingsbegränsningar genom att begära en gratis tillfällig licens.
Slutsats
I den här artikeln har du lärt dig hur du konverterar PostScript EPS/PS-filer till PNG- och JPG-bildformat med C++. Du har sett hela kodavsnittet tillsammans med stegen som krävs för att uppnå detta. Aspose.Page för C++ tillhandahåller många ytterligare funktioner som du kan utforska i detalj genom att besöka den officiella dokumentationen. Om du har några frågor är du välkommen att kontakta oss på vårt gratis supportforum.