← back to Handbag Authentication

handbag_data/github_datasets/iGAN/lib/image_save.py

77 lines

from lib import html
import cv2
import os
import glob
import numpy as np


class ImageSave:
    def __init__(self, web_fold, title, append=False):
        self.web_fold = web_fold
        self.title = title
        self.html = html.HTML(web_fold, title)
        self.html.add_header(title)
        self.count = 0
        self.append = append

    def save_image(self, im_data, txts=None, header=None, width=400, cvt=False, imlinks=None, verbose=True):
        if txts is not None:
            # st()
            assert len(im_data) == len(txts)
        if imlinks is not None:
            assert len(imlinks) == len(im_data)

        if not self.append:
            self.html = html.HTML(self.web_fold, self.title)
            self.html.add_header(self.title)
        im_links = []
        if header is not None:
            self.html.add_header(header)

        img_fold = self.html.img_fold
        final_txts = []
        for n, im in enumerate(im_data):
            if im is not None:
                if imlinks is None:
                    im_link = 'row%4.4d_image%5.5d.png' % (self.count, n)
                else:
                    im_link = imlinks[n]
                im_links.append(im_link)
                if cvt:
                    if im.ndim == 3 and im.shape[2] == 3:
                        im = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)
                    else:
                        im = np.squeeze(im)
                cv2.imwrite(os.path.join(img_fold, im_link), im)
                if verbose:
                    print('write image to %s' % os.path.join(img_fold, im_link))
                final_txts.append(txts[n])
        if txts is None:
            final_txts = im_links

        self.html.add_images(im_links, final_txts, im_links, width=width)
        self.count += 1

    def add_header(self, header):
        self.html.add_header(header)

    def save_folder(self, folder):
        # st()
        imgList = glob.glob('%s/*.{jpg,png,gif}' % folder)
        print('load %d images from %s' % (len(imgList), folder))
        print(imgList)
        ims = []
        txts = imgList
        for im_path in imgList:
            im = cv2.imread(os.path.join(folder, im_path))
            ims.append(im)
        self.save_image(ims, txts)

    def reset(self):
        self.count = 0
        self.html = html.HTML(self.web_fold, self.title)
        self.html.add_header(self.title)

    def save(self):
        self.html.save()