예제 #1
0
 def load_images():
     while True:
         uid = self.image_queue.get(block = True)
         image = QImage(str(picture_file_for_uid(uid))).scaled(
             IMG_SIZE, IMG_SIZE, QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
         self.images[uid] = image
         self.update()
예제 #2
0
def download_or_show_similar(data: dict, threshold=0.9) -> List[SimilarImage]:
    file = get_cached_file(data["img"])
    h = hash_img(file)
    similar = find_similar_images_hash(h, threshold)
    if similar:
        return [
            SimilarImage(s[0], s[1],
                         picture_file_for_uid(s[1]).name) for s in similar
        ]
    return download(data)
예제 #3
0
def main(ARGS):
    from uuid import UUID

    from cutespam.db import find_similar_images, picture_file_for_uid

    uuid = UUID(ARGS.uuid)
    result = find_similar_images(uuid, ARGS.threshold / 100, ARGS.limit)
    for r in result:
        uid = r[1]
        if ARGS.uri:
            uid = picture_file_for_uid(uid).absolute().as_uri()
        print(f"{r[0]:.1%}: {uid}")
예제 #4
0
def main(ARGS):
    from uuid import UUID
    from cutespam import open_file
    from cutespam.db import picture_file_for_uid, get_random_uid

    if ARGS.uid:
        uid = UUID(ARGS.uid)
    else:
        uid = get_random_uid()

    path = picture_file_for_uid(uid)
    if ARGS.uri:
        print(path.absolute().as_uri())
    else:
        open_file(path)
예제 #5
0
def main(ARGS):
    from cutespam.db import query, picture_file_for_uid
    import json

    filtered = query(keyword=ARGS.keyword,
                     not_keyword=ARGS.not_keyword,
                     author=ARGS.author,
                     caption=ARGS.caption,
                     source=ARGS.source,
                     rating=ARGS.rating,
                     limit=ARGS.limit,
                     random=ARGS.random)

    if ARGS.count:
        print(len(filtered))
    else:
        l = [(picture_file_for_uid(uid).absolute().as_uri()
              if ARGS.uri else str(uid)) for uid in filtered]
        if ARGS.json:
            print(json.dumps(l, indent=4))
        else:
            print("\n".join(l))
예제 #6
0
    def html_output(duplicates):
        t_html = """
        <html>
            <head>
                <style>
                    table {{
                        table-layout: fixed;
                        border-bottom: 1px solid black;
                        width: 100%;
                        padding: 5px;
                    }}
                    img {{
                        max-width: 100%;
                        max-height: 500px;
                    }}
                    code {{
                        display: block;
                        white-space: pre-wrap;
                        word-wrap: break-word;
                    }}
                </style>
            </head>
            <body>
            {tables}
            </body>
        </html>
        """
        t_table = """
            <table>
                <tr>{images}</tr>
                <tr>{links}</tr>
                <tr>{dimensions}</tr>
                <tr>{tags}</tr>
            </table>
        """

        tables = ""
        for duplicate in duplicates:
            images = ""
            links = ""
            dimensions = ""
            tags = ""

            for uid in duplicate:
                d = picture_file_for_uid(uid)
                fsize = os.path.getsize(d.resolve()) / 1_000_000
                with Image.open(d) as img_data:
                    width, height = img_data.size
                    fformat = img_data.format

                meta = CuteMeta.from_db(uid)
                path = str(d.resolve().absolute())
                images += f"<td><img src='{path}'/></td>"
                links += f"<td><a href={path}><code>{path}</code></a></td>"
                dimensions += f"<td><code>Resolution: {width}x{height}\nFormat: {fformat}\nSize: {fsize:.2f} MB</code></td>"
                tags += f"<td><code>{meta.to_string()}</code></td>"

            tables += t_table.format(images=images,
                                     links=links,
                                     dimensions=dimensions,
                                     tags=tags)

        return t_html.format(tables=tables)
예제 #7
0
 def set_image(self, uid):
     self.image = QImage(str(picture_file_for_uid(uid)))