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')