code: def add_raster_data(self, image, second_image=None):
          
          logger.debug("raster_image_size: {0}x{1}".format(*image.size))
          if image.size[0] != self.get_pixel_width():
              fmt = 'Wrong pixel width: {}, expected {}'
              raise BrotherQLRasterError(fmt.format(image.size[0], self.get_pixel_width()))
          images = [image]
          if second_image:
              if image.size != second_image.size:
                  fmt = "First and second image don't have the same dimesions: {} vs {}."
                  raise BrotherQLRasterError(fmt.format(image.size, second_image.size))
              images.append(second_image)
          frames = []
          for image in images:
              image = image.transpose(Image.FLIP_LEFT_RIGHT)
              image = image.convert("1")
              frames.append(bytes(image.tobytes(encoder_name='raw')))
          frame_len = len(frames[0])
          row_len = images[0].size[0]//8
          start = 0
          file_str = BytesIO()
          while start + row_len <= frame_len:
              for i, frame in enumerate(frames):
                  row = frame[start:start+row_len]
                  if second_image:
                      file_str.write(b'\x77\x01' if i == 0 else b'\x77\x02')
                  else:
                      file_str.write(b'\x67\x00')
                  if self._compression:
                      row = packbits.encode(row)
                  file_str.write(bytes([len(row)]))
                  file_str.write(row)
              start += row_len
          self.data += file_str.getvalue()
docs: Add the image data to the instructions.
          The provided image has to be binary (every pixel
          is either black or white).
  
          :param PIL.Image.Image image: The image to be converted and added to the raster instructions
          :param PIL.Image.Image second_image: A second image with a separate color layer (red layer for the QL-800 series)