Обрезка EPS | API-решение для C++

Обзор

В этой статье объясняется, как обрезать EPS с помощью C++. Она охватывает следующие темы.

Описание обрезки EPS на C++

Обрезка изображения — это операция, которая изменяет одно или несколько полей изображения: левое, правое, верхнее и нижнее. Другими словами, она обрезает содержимое изображения с краев.

Таким образом, размер полученного представления изображения EPS всегда будет меньше исходного. Объем файла не изменится, поскольку наше решение не работает с содержимым, а работает с заголовком файла EPS.

Поля изображения EPS определяются метаданными BoundingBox. Чтобы обрезать или, другими словами, настроить новый ограничивающий прямоугольник, мы должны знать существующий ограничивающий прямоугольник изображения EPS. В противном случае мы можем назначить значения нового ограничивающего прямоугольника за пределами существующего ограничивающего прямоугольника, что приведет к ошибке. Итак, шаги для обрезки изображения EPS в C++ следующие:

  1. Инициализируйте объект PsDocument с входным потоком, содержащим файл EPS.
  2. Извлеките существующий ограничивающий прямоугольник изображения с помощью статического метода ExtractEpsBoundingBox.
  3. Создайте выходной поток для полученного файла EPS.
  4. Создайте новый ограничивающий прямоугольник.
  5. Обрежьте объект PsDocument с новым ограничивающим прямоугольником с помощью статического метода CropEps.

Вы можете проверить качество Aspose.Page EPS Crop и просмотреть результаты с помощью бесплатного онлайн-сервиса Crop EPS и затем просмотреть полученный файл EPS с помощью нашего веб-приложения EPS Viewer.

Обрезка EPS в C++

В следующем фрагменте кода C++ мы получаем существующую ограничивающую рамку изображения и обрезаем EPS:

 1    // The path to the documents directory.
 2    System::String dataDir = RunExamples::GetDataDir_WorkingWithEPS();
 3    
 4    //Create an input stream for EPS file
 5    {
 6        System::SharedPtr<System::IO::Stream> inputEpsStream = System::MakeObject<System::IO::FileStream>(dataDir + u"input.eps", System::IO::FileMode::Open, System::IO::FileAccess::Read);
 7        // Clearing resources under 'using' statement
 8        System::Details::DisposeGuard<1> __dispose_guard_1({ inputEpsStream});
 9        // ------------------------------------------
10        
11        try
12        {
13            //Initialize PsDocument object with input stream
14            System::SharedPtr<PsDocument> doc = System::MakeObject<PsDocument>(inputEpsStream);
15            
16            //Get initial bounding box of EPS image
17            System::ArrayPtr<int32_t> initialBoundingBox = doc->ExtractEpsBoundingBox();
18            
19            //Create an output stream for resized EPS
20            {
21                System::SharedPtr<System::IO::Stream> outputEpsStream = System::MakeObject<System::IO::FileStream>(dataDir + u"output_crop.eps", System::IO::FileMode::Create, System::IO::FileAccess::Write);
22                // Clearing resources under 'using' statement
23                System::Details::DisposeGuard<1> __dispose_guard_0({ outputEpsStream});
24                // ------------------------------------------
25                
26                try
27                {
28                    //Create new bounding box
29                    //Bounding box is represented by 4 numbers: x0, y0, x, y, where x0 - left margin, y0 - top margin, x - (x0 + width), y - (y0 + height)
30                    System::ArrayPtr<float> newBoundingBox = System::MakeArray<float>({260, 300, 480, 432});
31                    
32                    //Crop EPS image and save to the output stream                    
33                    //Croping of image is changing of its bounding box so that new values of bounding box will be within initial bounding box, that is
34                    //initialBoundingBox[0] <= newBoundingBox[0] <= initialBoundingBox[2]
35                    //initialBoundingBox[1] <= newBoundingBox[1] <= initialBoundingBox[3]
36                    //initialBoundingBox[0] <= newBoundingBox[2] <= initialBoundingBox[2]
37                    //initialBoundingBox[1] <= newBoundingBox[3] <= initialBoundingBox[3]
38                    doc->CropEps(outputEpsStream, newBoundingBox);
39                }
40                catch(...)
41                {
42                    __dispose_guard_0.SetCurrentException(std::current_exception());
43                }
44            }
45        }
46        catch(...)
47        {
48            __dispose_guard_1.SetCurrentException(std::current_exception());
49        }
50    }

См. Обрезка EPS в Java и .NET.

Исходное изображение EPS
Исходное изображение
Обрезанное изображение EPS
Обрезанное изображение

Оцените обрезку EPS онлайн в нашем веб-приложении Crop EPS. Вы можете обрезать файл EPS и загрузить результат за несколько секунд.

Вы можете загрузить примеры и файлы данных с GitHub.

Have any questions about Aspose.Page?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.