Draw this set of labels to PNG.

        :param image: the image to draw onto
        :param int h_zoom: the horizontal zoom
        :param int v_zoom: the vertical zoom
        :param int current_y: the current y offset, in modules
        :type  image: :class:`PIL.Image`

def draw_png(self, image, h_zoom, v_zoom, current_y):
        """
        Draw this set of labels to PNG.

        :param image: the image to draw onto
        :param int h_zoom: the horizontal zoom
        :param int v_zoom: the vertical zoom
        :param int current_y: the current y offset, in modules
        :type  image: :class:`PIL.Image`
        """
        # PIL object
        draw = ImageDraw.Draw(image)
        mws = self.rconf.mws
        pixels_per_second = int(h_zoom / mws)

        # font for begin/end times
        time_font_height_pt = 12
        time_font = ImageFont.truetype(self.FONT_PATH, time_font_height_pt)

        # font for labels
        label_font_height_pt = 18
        label_font = ImageFont.truetype(self.FONT_PATH, label_font_height_pt)

        current_y_px = current_y * v_zoom + 0.25 * v_zoom
        for (begin, end, label) in self.labelset:
            # base x position
            begin_px = int(begin * pixels_per_second)
            end_px = int(end * pixels_per_second)

            # select color for the horizontal bar
            if label == "speech":
                color = PlotterColors.RED
            elif label == "nonspeech":
                color = PlotterColors.GREEN
            else:
                color = self.parameters["color"]

            # horizontal bar
            bar_top_px = current_y_px + v_zoom * 0.5 - self.TICK_WIDTH
            bar_bottom_px = bar_top_px + 2 * self.TICK_WIDTH
            bar_left_px = begin_px
            bar_right_px = end_px
            draw.rectangle((bar_left_px, bar_top_px, bar_right_px, bar_bottom_px), fill=color)

            # left guide
            if self.parameters["begin_guide"]:
                top_px = 0
                bottom_px = current_y_px + v_zoom
                left_px = begin_px
                draw.rectangle((left_px, top_px, left_px, bottom_px), fill=color)

            # left tick
            top_px = current_y_px
            bottom_px = current_y_px + v_zoom
            left_px = begin_px
            right_px = begin_px + self.TICK_WIDTH
            draw.rectangle((left_px, top_px, right_px, bottom_px), fill=PlotterColors.BLACK)

            # right guide
            if self.parameters["end_guide"]:
                top_px = 0
                bottom_px = current_y_px + v_zoom
                left_px = end_px
                draw.rectangle((left_px, top_px, left_px, bottom_px), fill=color)

            # right tick
            top_px = current_y_px
            bottom_px = current_y_px + v_zoom
            left_px = end_px - self.TICK_WIDTH
            right_px = end_px
            draw.rectangle((left_px, top_px, right_px, bottom_px), fill=PlotterColors.BLACK)

            # begin time
            if self.parameters["begin_time"]:
                sb = ("%.03f" % (begin - int(begin)))[2:]
                left_px = begin_px + self.TICK_WIDTH + self.TEXT_MARGIN
                top_px = current_y_px - self.TEXT_MARGIN
                draw.text((left_px, top_px), sb, PlotterColors.BLACK, font=time_font)

            # end time
            if self.parameters["end_time"]:
                se = ("%.03f" % (end - int(end)))[2:]
                left_px = end_px - self.TEXT_MARGIN - self.TICK_WIDTH - self.text_bounding_box(time_font_height_pt, se)[0]
                top_px = current_y_px + v_zoom - self.text_bounding_box(time_font_height_pt, sb)[1]
                draw.text((left_px, top_px), se, PlotterColors.BLACK, font=time_font)

            # interval label
            if self.parameters["labels"]:
                left_px = begin_px + (end_px - begin_px - self.text_bounding_box(label_font_height_pt, label)[0]) // 2
                top_px = current_y_px + v_zoom
                draw.text((left_px, top_px), label, PlotterColors.BLACK, font=label_font)

        # label
        left_px = 0
        top_px = current_y_px + v_zoom
        if self.label is not None:
            draw.text((left_px, top_px), self.label, PlotterColors.BLACK, font=label_font)