Color mismanaging when saving to jpeg - python

I am coding a python script which uses Pillow to create images.
In my code I import a jpeg background and another jpeg image which I'll combine with draw.rounded_rectangle() and draw.text().
Problem is when I save the image directly to a jpeg file, the colors are very different from the png image. It's like the jpeg image has a greyscale filter applied.
Here's my code to save the images :
background.save('fin2.jpg', format="jpeg", quality=100, subsampling=0)
background.save('fin2.png', format="png")
os.system('sips -s format jpeg fin2.png --out ' + 'fin3.jpg')
As you can notice I use Apple's sips (scriptable image processing system) to convert the png to jpeg and the output is fine.
Here are the output images :
fin2.jpg
fin2.png
fin3.png
Any idea how to fix this in the code ?
(I am unable to upload the pictures directly to stackoverflow atm this is why I use external links)

Related

PILLOW - Write list images in PDF using PIL and and compressed in PNG

I'm trying to save a list of images in a PDF :
frames[0].save(buff, format='PDF', save_all=True,
append_images=frames[1:])
But when I'm doing like that, it seems that the images are compressed in JPEG inside the PDF. Is it possible to compress as PNG images?
Thanks for help

How to convert all PNG image in folder to JPG without interpolation

I have some mask files in my folder stored in PNG format.
I want to convert all PNG images to JPG without interpolation.
An example PNG image can be found here.
I tried the following command of the ImageMagick but it didn't work.
Input image size is 640x512 (w,h).
convert -interpolate Integer -filter point '*.png[640x]' -set filename:base "%[basename]" "%[filename:base].jpg"
Thanks.

how to convert jpeg to tiff file in python

Is there any way to convert .jpeg to .tiff file?
If yes, then how to do that?
There are many library in Python that can convert file from one format to another.
But, I have not found anything for this problem.
Thanks in advance!
see this
from PIL import Image
im = Image.open('yourImg.jpg')
im.save("pathToSave/hello.tiff", 'TIFF')
You can use PIL (Python Imaging Library) for this:
import Image
im = Image.open('test.jpg')
im.save('test.tiff') # or 'test.tif'
Also, this was the first result for your problem on Google, make sure you google extensively first.
According to OpenCV docs for functions used for image and video reading and writing imread does support JPEG files and imwrite can save TIFF files, though with some limitations:
Only 8-bit (or 16-bit unsigned (CV_16U) in case of PNG, JPEG 2000, and TIFF) single-channel or 3-channel (with ‘BGR’ channel order) images can be saved using this function.

How can I convert a .dds file to a .png in python?

I am trying to create some images by manipulating image pieces stored in .dds files, and then write the finished image as a .png. I see that there is a dds python module in Direct Python 11, which seems possibly sufficient except that it saves to .dds format. Is there a way to save to another image format?
The Python Imaging Library has a open() method that supports dds files and has a read and save() can save an image to many formats (png included).
Note that, at the moment, only DXT1, DXT3, and DXT5 pixel formats are supported and only in RGBA mode.
Since Python Imaging Library link is not awailable, I will show actual solution with wand library:
from wand import image
with image.Image(filename="white_rect_dxt3.dds") as img:
img.compression = "no"
img.save(filename="white_rect_dxt3.png")
And same from .png to .dds
from wand import image
with image.Image(filename='white_rect.png') as img:
img.compression = "dxt3"
img.save(filename='white_rect_dxt3.dds')

preserve exif data while resizing images

I am working in a mobile application that allows users to upload images. I process these images using a django backend.
I want to save resized image in server.
I create thumbnails of the image using PIL, but all exif data of the image is lost. I want to preserve the exif data in the resized image.
I am trying to use the gexiv2 library to copy the exif data of the original image and save it to the resized image:
exif = GExiv2.Metadata(file_path)
To presrve exif data, I save the resized image to the disk and gexiv2 uses this file path:
# exif of orginal image
exif = GExiv2.Metadata(file_path)
# exif of resized image
newExif = GExiv2.Metadata('img/512_c')
# save all exif data of orinal image to resized
for tag in exif.get_exif_tags():
newExif[tag] = exif[tag]
# edit exif data - size
newExif['Exif.Photo.PixelXDimension'] = str(im.size[0])
newExif['Exif.Photo.PixelYDimension'] = str(im.size[1]).
But my issue is, django gives me the client uploaded images either as a file path
or as a buffer.
When I get the file path, I have no issue to get the exif data of the original image using gexiv2.
When I get an image buffer, I can't directly get the exif data using gexiv2, since gexiv2 needs the file path parameter to get the exif, so I want to save the image buffer to disk temporarily.
What is the best method to save the image buffer to disk?
Finally I got the solution,
https://stackoverflow.com/a/11813684/658976
This confirms all images uploaded to server had file path (no buffered images).

Categories