I am looking for a way to adjust the halftone screens of each color channel in CMYK PDF files using Python. I would like to enhance the perceived print resolution of the files using techniques such as intaglio or stipple engraving. The goal is to produce high-quality 4/c prints at 300-350 ppi and monochrome printing at 1200 ppi, using a maximum file size of 5 MB per US Letter page.

I have found that TIFF is the only raster image format that supports CMYK color mode, but TIFF files are too large in size. On the other hand, PDF is a more forgiving format and images in "Print Ready" CMYK PDFs are usually in RGB format. The conversion to CMYK happens at the end when viewed in programs, drivers, and hardware.

I am exploring the possibility of using ML/AI to fine-tune the 1200 dpi 1-bit output for each color channel, rather than using halftone circles. For example, transform the black layer to the elegance of a copperplate engraving or Dürer stylized line work. The CMY layers can remain as halftones.

I would like to know if it is possible to achieve this within a PDF document. File size is a concern, so I am looking for a solution that optimizes and makes the files portable.

Here is a comparison of file sizes at different resolutions and formats:

300 ppi (2550px x 3300px) US Letter Sized Image

  • TIFF (CMYK, No Compression) 34.2 MB

  • TIFF (CMYK, ZIP Compression) 26.1 MB

  • JPG (RGB, 12 quality) 14.1 MB

  • JPG (RGB, 6 quality) 2.1 MB

1200 ppi (10,200px x 13,200px) US Letter Sized Image

  • PNG (BITMAP, 1-bit) 0.5 MB to 2.5 MB

2 Answers 2


There is a reason why halftoning is usually controlled more downstream by the RIP software: the halftoning is optimized for the exact resolution of the imaging device and the printing process. It also takes care of linearisation (correction curves).

Cool that you want to experiment with your own halftoning, 1 bit tiff will be your best format. Note that it supports half a dozen different compression algorithms. Check what works best with your halftone technique.

JPEG will be horrible, as the lossy compression is optimized for human perception and will butcher your microscopic patterns.

  • @adhoc, I think you have to use 1-bit TIFF if you are making custom screen. One image for each channel. They can be stacked in a PDF, as I don't think there's a standard way of having several 1-bit channels in one image file. And setting K to zero sounds wrong. Each channel you want to print with should have whatever treatment you are planning on doing. And you should somehow address the problem that you can't have 100% registration. So each channel must be different somehow. Random or at different angles. See this question and my answer.
    – Wolff
    Commented Feb 6, 2023 at 15:48
  • @adhoc, btw. Turning images into stipple engravings is a subject that really interests me. Been making some JavaScript code that uses 2d collision detection to make the dots find their place. OK results but sadly still too slow and buggy to show to the world. A few lo-res screenshots: 1. Two-color separation, 2. Comparison between pixels, halftone dots and stipple dots.
    – Wolff
    Commented Feb 6, 2023 at 16:19
  • @wolff looks promising. But there’s definitely some moiré and linearisation challenges. Commented Feb 7, 2023 at 19:03
  • @KrisVanBael, totally. The dots find their place in a chaotic manner, but they sometimes line up by coincidence. I can't make a competitor to halftone. I see it more as an artistic effect I might use in a project.
    – Wolff
    Commented Feb 7, 2023 at 19:45
  • @Wolff Your examples of halftoning are solid. For this concept I am condersering the implication of machine learning in regards to style of reproductions. Modern CMYK prints mostly can't be picked up by the human eye, we need a loop. I am particularly inspired by the old master prints It seems like something fracitical is in the nature of art.
    – adhoc
    Commented Feb 13, 2023 at 3:13

No. Tiff is not the only format that supports CMYK. You could use JPG. If you use the best settings you will have imperceptible degradation. You could try to compress it more to have your 5Mb goal.

But I would probably start reducing the PPI. A 212 PPI file is, IMHO enough on an 8bit per channel file.

You can also try some compression on TIF. LZW or ZIP.

On the other hand, PDF is a more forgiving format and images in "Print Ready" CMYK PDFs are usually in RGB format.

Also, if a PDF has all elements in CMYK mode, there is no reason to now have them in RGB. I do not understand that part.

PDF is a container, it is not a raster image format. You are just taking a photo and putting inside an envelope.

  • Not a pre-press person, but isn't any plate RIP just going to thrash his "optimizations"?
    – Yorik
    Commented Feb 2, 2023 at 21:16
  • Once any file is "opened" is not the sent file anymore, it is simply an image. The optimization is only during the encoding. If someone needs a "limitation" on filesize is "only" for the upload. When processed by the rip, a weight limitation has no meaning.
    – Rafael
    Commented Feb 3, 2023 at 18:26
  • I always wonder why people need a limitation on file size. That is something the person in charge of the server should address. But C'est la vie. :)
    – Rafael
    Commented Feb 3, 2023 at 18:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.