require 'chunky_png'

img1 = ChunkyPNG::Image.from_file('image1.png')
img2 = ChunkyPNG::Image.from_file('image2.png')
out = ChunkyPNG::Image.new(img1.width, img1.height, ChunkyPNG::Color::TRANSPARENT)

img1.pixels.length.times do |i|
 a = img1.pixels[i] == ChunkyPNG::Color::BLACK ? 1 : 0
 b = img2.pixels[i] == ChunkyPNG::Color::BLACK ? 1 : 0
 out.pixels[i] = (a ^ b) == 1 ? ChunkyPNG::Color::BLACK : ChunkyPNG::Color::WHITE
end

out.save('out.png')