I am using ImageMagick library for image manipulation. I need to load a 'bmp' image, convert it to jpeg, load it in a buffer and send it across the network.
However, I am not able to find any supporting function in ImageMagick which can convert and store data in buffer. I am only able to write in file. Tried using Magick::Blob
but still of no use.
Following code is used to load, convert and write in file:
Magick::Image img("Sample.bmp");
img.magick("jpeg");
img.write("Output.jpeg");
EDIT:
Used Magick::Blob as:
Magick::Blob myBlob;
img.write(&myBlob);
const void *myData = myBlob.data();
But here I can't convert myData to const char*
buffer without any loss.
Did you try :
Magick::Image img("Sample.bmp");
Blob blob;
img.magick("JPEG");
img.write(&blob);
// Then access blob's data with blob.data()
sendJpegImage(blob.data(), blob.length());
With void sendJpegImage(void* data, size_t length)
being your data sending function.
Thanks a lot for the answers.
My existing socket connection accepts string stream at both ends. That's why I needed const char*
.
Found conversion function base64()
in Magick::Blob
which returns string.
This solved my problem. For reference, the final code becoms:
Magick::Image img("Sample.bmp");
Magick::Blob blob;
img.magick( "JPEG" )
img.write( &blob );
std::string myStr = myBlob.base64();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With