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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top