Combinando 4 tiffs monocromáticos separados en 1 cmyk tiff
-
23-12-2019 - |
Pregunta
Tengo imágenes de TIFF almacenadas de tal manera que tengo cada plano (color) almacenado en un archivo separado.Cada archivo (C, M, Y, K) es un TIFF grueso almacenado como un archivo monocromo de 8 bits por archivo de píxel.
Quiero combinar estos 4 archivos en un tiff de color CMYK usando la Biblioteca de imágenes de Python (PIL)
Este es el código que tengo hasta ahora, pero la salida TIFF producida no es correcta, el TIFF se está combinando en un archivo que es en su mayoría negro.He fusionado estos archivos con otra utilidad y el resultado es correcto, por lo que sé que no hay un problema con los archivos de entrada.
Este es el código que tengo hasta ahora:
if len(sys.argv) <= 1:
print "ERROR: Usage !"
exit(1)
try:
cFile = str(sys.argv[1])+"Cyan.tif"
mFile = str(sys.argv[1])+"Magenta.tif"
yFile = str(sys.argv[1])+"Yellow.tif"
kFile = str(sys.argv[1])+"Black.tif"
print "Opening files:"
print cFile
print mFile
print yFile
print kFile
c_img = Image.open(cFile)
c_img = c_img.convert("L")
m_img = Image.open(mFile)
m_img = m_img.convert("L")
y_img = Image.open(yFile)
y_img = y_img.convert("L")
k_img = Image.open(kFile)
k_img = k_img.convert("L")
except Exception, e:
print "ERROR: Unable to open file..."
print str(e)
exit(1)
try:
mergedRaster = Image.merge('CMYK', (c_img, m_img, y_img, k_img))
mergedRaster = mergedRaster.convert("CMYK")
except Exception, e:
print "ERROR: Merging plates"
print str(e)
exit(0)
#exit(0)
try:
mergedRaster.save("output.tif", format="TIFF")
except Exception, e:
print "ERROR: Writing tiff"
Nota: He hecho lo mismo sin ninguna de las funciones .convert y encontré que el resultado es el mismo.
Solución
Encontré que la solución es que todos los valores en los archivos separados necesarios para ser invertidos, es decir, 255 - valor.
Convertir cada archivo en una matriz NUTPY y luego restándola de 255. \
try:
cArray = numpy.array(c_img)
mArray = numpy.array(m_img)
yArray = numpy.array(y_img)
kArray = numpy.array(k_img)
except Exception, e:
print "ERROR: Converting to numpy array..."
print str(e)
exit(1)
try:
toSub = 255
cInvArray = toSub - cArray
mInvArray = toSub - mArray
yInvArray = toSub - yArray
kInvArray = toSub - kArray
except Exception, e:
print "ERROR: inverting !"
print str(e)
try:
cPlate = Image.fromarray(cInvArray)
mPlate = Image.fromarray(mInvArray)
yPlate = Image.fromarray(yInvArray)
kPlate = Image.fromarray(kInvArray)
except Exception, e:
print "ERROR: Creating image from numpy arrays"
print str(e)
exit(1)
try:
mergedRaster = Image.merge('CMYK', (cPlate, mPlate, yPlate, kPlate))
No sé por qué se requirió esto, pero si alguien puede explicarlo que sería genial.