1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
open Image
let size ~extension ich =
let ext = String.lowercase_ascii extension in
if List.mem ext ImagePNG.extensions
then ImagePNG.size ich else
if List.mem ext ImagePPM.extensions
then ImagePPM.size ich else
if List.mem ext ImageXCF.extensions
then ImageXCF.size ich else
if List.mem ext ImageJPG.extensions
then ImageJPG.size ich else
if List.mem ext ImageGIF.extensions
then ImageGIF.size ich else
if List.mem ext ImageBMP.extensions
then ImageBMP.size ich else
raise (Not_yet_implemented ext)
let openfile ~extension ich : image =
let ext = String.lowercase_ascii extension in
if List.mem ext ImagePNG.extensions
then ImagePNG.parsefile ich else
if List.mem ext ImageGIF.extensions
then ImageGIF.parsefile ich else
if List.mem ext ImagePPM.extensions
then ImagePPM.parsefile ich else
if List.mem ext ImageBMP.extensions
then ImageBMP.parsefile ich else
raise (Not_yet_implemented ext)
let openfile_streaming ~extension ich state =
let if_some f = function
| _, _, None as x -> x
| image, time, Some v -> image, time, Some (f v) in
match state with
| Some (`GIF t) ->
if_some (fun v -> `GIF v) (ImageGIF.read_streaming ich (Some t))
| None ->
let ext = String.lowercase_ascii extension in
if List.mem ext ImagePNG.extensions
then Some (ImagePNG.parsefile ich), 0, None else
if List.mem ext ImageGIF.extensions
then if_some (fun v -> `GIF v) (ImageGIF.read_streaming ich None) else
if List.mem ext ImagePPM.extensions
then Some (ImagePPM.parsefile ich), 0, None else
if List.mem ext ImageBMP.extensions
then Some (ImageBMP.parsefile ich), 0, None else
raise (Not_yet_implemented ext)
let writefile ~extension (och:ImageUtil.chunk_writer) i =
let extension = String.lowercase_ascii extension in
if List.mem extension ImagePNG.extensions
then ImagePNG.write och i else
if List.mem extension ImageGIF.extensions
then ImageGIF.write och i else
if List.mem extension ImagePPM.extensions
then ImagePPM.write och i else
raise (Not_yet_implemented extension)
module PNG = ImagePNG
module PPM = ImagePPM
module XCF = ImageXCF
module JPG = ImageJPG
module BMP = ImageBMP
module GIF = ImageGIF