| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 | 
							- local gm = require 'graphicsmagick'
 
- require 'pl'
 
- local image_loader = {}
 
- function image_loader.decode_float(blob)
 
-    local im = image_loader.decode_byte(blob)
 
-    if im then
 
-       im = im:float():div(255)
 
-    end
 
-    return im
 
- end
 
- function image_loader.encode_png(tensor)
 
-    local im = gm.Image(tensor, "RGB", "DHW")
 
-    im:format("png")
 
-    return im:toBlob()
 
- end
 
- function image_loader.decode_byte(blob)
 
-    local load_image = function()
 
-       local im = gm.Image()
 
-       im:fromBlob(blob, #blob)
 
-       -- FIXME: How to detect that a image has an alpha channel?
 
-       if blob:sub(1, 4) == "\x89PNG" or blob:sub(1, 3) == "GIF" then
 
- 	 -- merge alpha channel
 
- 	 im = im:toTensor('float', 'RGBA', 'DHW')
 
- 	 local w2 = im[4]
 
- 	 local w1 = im[4] * -1 + 1
 
- 	 local new_im = torch.FloatTensor(3, im:size(2), im:size(3))
 
- 	 -- apply the white background
 
- 	 new_im[1]:copy(im[1]):cmul(w2):add(w1)
 
- 	 new_im[2]:copy(im[2]):cmul(w2):add(w1)
 
- 	 new_im[3]:copy(im[3]):cmul(w2):add(w1)
 
- 	 im = new_im:mul(255):byte()
 
-       else
 
- 	 im = im:toTensor('byte', 'RGB', 'DHW')
 
-       end
 
-       return im
 
-    end
 
-    local state, ret = pcall(load_image)
 
-    if state then
 
-       return ret
 
-    else
 
-       return nil
 
-    end
 
- end
 
- function image_loader.load_float(file)
 
-    local fp = io.open(file, "rb")
 
-    local buff = fp:read("*a")
 
-    fp:close()
 
-    return image_loader.decode_float(buff)
 
- end
 
- function image_loader.load_byte(file)
 
-    local fp = io.open(file, "rb")
 
-    local buff = fp:read("*a")
 
-    fp:close()
 
-    return image_loader.decode_byte(buff)
 
- end
 
- local function test()
 
-    require 'image'
 
-    local img
 
-    img = image_loader.load_float("./a.jpg")
 
-    if img then
 
-       print(img:min())
 
-       print(img:max())
 
-       image.display(img)
 
-    end
 
-    img = image_loader.load_float("./b.png")
 
-    if img then
 
-       image.display(img)
 
-    end
 
- end
 
- --test()
 
- return image_loader
 
 
  |