Cpp-Processing
ImageEncoding.h
1 #pragma once
2 #include <libexif/exif-data.h>
3 #include <optional>
4 #include <ostream>
5 #include <vector>
6 #include <opencv2/core.hpp>
7 
8 namespace celantur {
9 
32  struct ExifMetadata {
37  ExifMetadata(ExifData* data);
38  ~ExifMetadata();
39  ExifMetadata(const ExifMetadata&) = delete;
40  ExifMetadata& operator=(const ExifMetadata&) = delete;
41 
43  ExifMetadata(ExifMetadata&& other) noexcept;
45  ExifMetadata& operator=(ExifMetadata&& other) noexcept;
46 
51  void print_exif_entry(ExifEntry* entry, std::ostream& oss) const;
52 
59  void print_exif_content(ExifContent* content, std::ostream& oss) const;
60 
62  void print_debug_info(std::ostream& stream) const;
64 
70  int get_orientation() const;
71 
77  ExifData* metadata{nullptr};
78  };
79 
81  std::vector<unsigned char> png_encode(cv::Mat image, int png_compression_level = 3);
82  cv::Mat png_decode(std::vector<unsigned char> data);
83  cv::Mat png_decode(const unsigned char* data, size_t size);
85 
94  std::vector<unsigned char> jpeg_encode(cv::Mat image, int jpeg_quality = 95, std::optional<ExifMetadata> exif_metadata = std::nullopt);
95 
104  cv::Mat jpeg_decode(const unsigned char* data, size_t size);
111  cv::Mat jpeg_decode(std::vector<unsigned char> data);
112 
121  ExifMetadata jpeg_get_exif_metadata(const unsigned char* data, size_t size);
122 
132  cv::Mat rotate_image(const cv::Mat& image, int orientation);
134 }
std::vector< unsigned char > jpeg_encode(cv::Mat image, int jpeg_quality=95, std::optional< ExifMetadata > exif_metadata=std::nullopt)
Encode an image to JPEG format with optional EXIF metadata. This function compresses the input image ...
Definition: ImageEncoding.cpp:27
cv::Mat rotate_image(const cv::Mat &image, int orientation)
Rotate an image based on EXIF orientation. This function rotates the input image according to the spe...
Definition: ImageEncoding.cpp:165
ExifMetadata jpeg_get_exif_metadata(const unsigned char *data, size_t size)
Extract EXIF metadata from a JPEG byte array. This function parses the EXIF metadata from a JPEG imag...
Definition: ImageEncoding.cpp:159
cv::Mat jpeg_decode(const unsigned char *data, size_t size)
Decode a JPEG image from a byte array. This function takes a byte array containing JPEG-encoded data ...
Definition: ImageEncoding.cpp:75
Definition: CelanturDetection.h:6
Structure to manage EXIF metadata for images. This structure encapsulates EXIF data and provides meth...
Definition: ImageEncoding.h:32
void print_exif_content(ExifContent *content, std::ostream &oss) const
Print the contents of an ExifContent structure to the provided output stream. This function iterates ...
Definition: ImageEncoding.cpp:123
ExifMetadata(ExifData *data)
Constructor that takes ownership of an ExifData pointer.
Definition: ImageEncoding.cpp:88
void print_exif_entry(ExifEntry *entry, std::ostream &oss) const
Print the EXIF metadata to the provided output stream. This function outputs the EXIF metadata in a h...
Definition: ImageEncoding.cpp:115
ExifData * metadata
Pointer to the underlying ExifData structure. This pointer is managed by the ExifMetadata instance an...
Definition: ImageEncoding.h:77
ExifMetadata(const ExifMetadata &)=delete
~ExifMetadata()
Definition: ImageEncoding.cpp:94
ExifMetadata & operator=(const ExifMetadata &)=delete
int get_orientation() const
Retrieve the orientation value from the EXIF metadata. This function extracts the orientation tag fro...
Definition: ImageEncoding.cpp:143