Almost there with single page JBIG2globals

This commit is contained in:
John Whitington 2023-12-04 16:58:13 +00:00
parent e928818ccb
commit 1bc4c57fec
1 changed files with 13 additions and 4 deletions

View File

@ -412,24 +412,33 @@ let jbig2_dimensions data =
(bget data 11 * 256 * 256 * 256 + bget data 12 * 256 * 256 + bget data 13 * 256 + bget data 14, (bget data 11 * 256 * 256 * 256 + bget data 12 * 256 * 256 + bget data 13 * 256 + bget data 14,
bget data 15 * 256 * 256 * 256 + bget data 16 * 256 * 256 + bget data 17 * 256 + bget data 18) bget data 15 * 256 * 256 * 256 + bget data 16 * 256 * 256 + bget data 17 * 256 + bget data 18)
let obj_of_jbig2_data ?global:int data = let obj_of_jbig2_data ?global data =
let d = let d, extra =
let decodeparms, extra =
match global with
| Some data ->
[("/DecodeParms", Pdf.Dictionary [("/JBIG2Globals", Pdf.Indirect 10000)])],
[(10000, Pdf.Stream {contents = (Pdf.Dictionary [("/Length", Pdf.Integer (bytes_size data))], Pdf.Got data)})] (* FIXME flate *)
| None ->
[], []
in
let w, h = jbig2_dimensions data in let w, h = jbig2_dimensions data in
[("/Length", Pdf.Integer (Pdfio.bytes_size data)); [("/Length", Pdf.Integer (Pdfio.bytes_size data));
("/Filter", Pdf.Name "/JBIG2Decode"); ("/Filter", Pdf.Name "/JBIG2Decode");
("/Subtype", Pdf.Name "/Image"); ("/Subtype", Pdf.Name "/Image");
("/BitsPerComponent", Pdf.Integer 1); ("/BitsPerComponent", Pdf.Integer 1);
("/ColorSpace", Pdf.Name "/DeviceGray"); ("/ColorSpace", Pdf.Name "/DeviceGray");
(* FIXME decodeparms for global *)
("/Width", Pdf.Integer w); ("/Width", Pdf.Integer w);
("/Height", Pdf.Integer h)] ("/Height", Pdf.Integer h)]
@ decodeparms, extra
in in
Pdf.Stream {contents = (Pdf.Dictionary d, Pdf.Got data)}, [] Pdf.Stream {contents = (Pdf.Dictionary d, Pdf.Got data)}, extra
let image_of_input fobj i = let image_of_input fobj i =
let pdf = Pdf.empty () in let pdf = Pdf.empty () in
let data = Pdfio.bytes_of_input i 0 i.Pdfio.in_channel_length in let data = Pdfio.bytes_of_input i 0 i.Pdfio.in_channel_length in
let obj, extras = fobj data in let obj, extras = fobj data in
iter (Pdf.addobj_given_num pdf) extras;
let w = match Pdf.lookup_direct pdf "/Width" obj with Some x -> Pdf.getnum pdf x | _ -> assert false in let w = match Pdf.lookup_direct pdf "/Width" obj with Some x -> Pdf.getnum pdf x | _ -> assert false in
let h = match Pdf.lookup_direct pdf "/Height" obj with Some x -> Pdf.getnum pdf x | _ -> assert false in let h = match Pdf.lookup_direct pdf "/Height" obj with Some x -> Pdf.getnum pdf x | _ -> assert false in
let page = let page =