From 42a2b08abf87875812402331c32065a24215f636 Mon Sep 17 00:00:00 2001 From: yyc12345 Date: Wed, 9 Sep 2026 12:09:33 +0800 Subject: [PATCH] feat: support image-png/bmp/gif --- reference/bitmap assets/LICENSE.txt | 20 ++ src/bitmap/LICENSES.toml | 20 +- ..._suaveolens_floriade_to_Canberra-mask.png~ | Bin 0 -> 98171 bytes .../assemblicon/geometry.py | 8 +- .../nostd_icons/mimetype_icons.py | 71 +---- .../std_icons/components.py | 14 - .../std_icons/mimetype_icons.py | 254 +++++++++++++++++- .../std_icons/status_icons.py | 2 + 8 files changed, 299 insertions(+), 90 deletions(-) create mode 100644 src/bitmap/Tulipa_suaveolens_floriade_to_Canberra-mask.png~ diff --git a/reference/bitmap assets/LICENSE.txt b/reference/bitmap assets/LICENSE.txt index 64b665f..6e26645 100644 --- a/reference/bitmap assets/LICENSE.txt +++ b/reference/bitmap assets/LICENSE.txt @@ -13,3 +13,23 @@ I, Jonathan Zander, CC BY-SA 3.0 , via Wikimedia Commons + +https://commons.wikimedia.org/wiki/File:Nycticorax_nycticorax12.jpg +This file is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported, 2.5 Generic, 2.0 Generic and 1.0 Generic license. +Calibas + +https://commons.wikimedia.org/wiki/File:Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg +This work is in the public domain in its country of origin and other countries and areas where the copyright term is the author's life plus 100 years or fewer. +Vincent van Gogh +Google Arts & Culture + +https://commons.wikimedia.org/wiki/File:Tulipa_suaveolens_floriade_to_Canberra.jpg +This file is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported license. +John O'Neill + +https://commons.wikimedia.org/wiki/File:International_hot_air_balloon_festival_in_leon_guanajuato_mexico_2012.jpg +This file is licensed under the Creative Commons Attribution-Share Alike 3.0 Unported license. +Tomascastelazo +https://commons.wikimedia.org/wiki/File:Hot-air_balloon_in_Tambov_-_02.jpg +This file is licensed under the Creative Commons Attribution-Share Alike 4.0 International license. +Alexander Novikov diff --git a/src/bitmap/LICENSES.toml b/src/bitmap/LICENSES.toml index 6c017c8..824c498 100644 --- a/src/bitmap/LICENSES.toml +++ b/src/bitmap/LICENSES.toml @@ -1,5 +1,23 @@ [[licenses]] file = 'Niinsaare_järv.jpg' license = "CC-BY-SA-3.0" -authors = ["Ivar Leidus", "Wikimedia Commons"] +authors = ["Ivar Leidus"] source = 'https://commons.wikimedia.org/wiki/File:Niinsaare_j%C3%A4rv.jpg' + +[[licenses]] +file = 'Tulipa_suaveolens_floriade_to_Canberra.jpg' +license = "CC-BY-SA-3.0" +authors = ["John O'Neill"] +source = 'https://commons.wikimedia.org/wiki/File:Tulipa_suaveolens_floriade_to_Canberra.jpg' + +[[licenses]] +file = 'Hot-air_balloon_in_Tambov_-_02.jpg' +license = "CC-BY-SA-4.0" +authors = ["Alexander Novikov"] +source = 'https://commons.wikimedia.org/wiki/File:Hot-air_balloon_in_Tambov_-_02.jpg' + +[[licenses]] +file = 'Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg' +license = "CC0-1.0" # Public Domain actually. +authors = ["Vincent van Gogh", "Google Arts & Culture"] +source = 'https://commons.wikimedia.org/wiki/File:Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg' diff --git a/src/bitmap/Tulipa_suaveolens_floriade_to_Canberra-mask.png~ b/src/bitmap/Tulipa_suaveolens_floriade_to_Canberra-mask.png~ new file mode 100644 index 0000000000000000000000000000000000000000..4496f796865cee3685a41d55baccf743b5c41b38 GIT binary patch literal 98171 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 "Rectangle": """ - TODO + Create the rectangle with the size of this region's parent, and the margin between this region and its parent. :param width: The width of parent. :param height: The height of parent. @@ -94,7 +94,7 @@ class Rectangle: pos: Point, top: int, right: int, bottom: int, left: int ) -> "Rectangle": """ - TODO + Create the rectangle with the central point in this region's parent, and the padding between this point and region's border. :param x: The X factor of reference point. :param y: The Y factor of reference point. @@ -103,7 +103,9 @@ class Rectangle: :param bottom: The distance from reference point to this rectangle's bottom border. :param left: The distance from reference point to this rectangle's left border. """ - return Rectangle(Point(pos.x - left, pos.y - top), Point(pos.x + right, pos.y + bottom)) + return Rectangle( + Point(pos.x - left, pos.y - top), Point(pos.x + right, pos.y + bottom) + ) @property def width(self) -> int: diff --git a/tool/src/aurora_iconset_builder/nostd_icons/mimetype_icons.py b/tool/src/aurora_iconset_builder/nostd_icons/mimetype_icons.py index 2101cc9..a0e2c5c 100644 --- a/tool/src/aurora_iconset_builder/nostd_icons/mimetype_icons.py +++ b/tool/src/aurora_iconset_builder/nostd_icons/mimetype_icons.py @@ -1,75 +1,8 @@ -import PIL.Image -import PIL.ImageEnhance from ..types import AuroraContext, AuroraEnvironment from ..assemblicon.highlevel.utils import FdContext, WinCategory, MacCategory -from ..assemblicon.highlevel.source import SvgSource, BitmapSource, TempArtSource +from ..assemblicon.highlevel.source import SvgSource, TempArtSource from ..assemblicon.highlevel.sink import TempArtSink, FdArtSink, WinArtSink, MacArtSink -from ..assemblicon.geometry import Rectangle, Point -from ..assemblicon.lowlevel.artproc import ( - aspect_ratio_scale_and_crop, - VerticalAnchor, - HorizontalAnchor, -) def register(ctx: AuroraContext) -> None: - ctx.register( - "nostd/mimetype/image-jpeg", - ( - TempArtSource("component", "image-base.png"), - BitmapSource("bitmap", "Niinsaare_järv.jpg"), - TempArtSink("image-jpeg.png"), - FdArtSink(FdContext.MimeTypes, "image-jpeg"), - WinArtSink(WinCategory.Extension, "jpg"), - MacArtSink(MacCategory.Extension, "jpg"), - ), - build_image_jpeg_icon, - ) - - -IMAGE_INNER_RECT = Rectangle(Point(20 * 4, 52 * 4), Point(236 * 4, 204 * 4)) - -def build_image_jpeg_icon( - env: AuroraEnvironment, - base_src: TempArtSource, - bitmap_src: BitmapSource, - temp_sink: TempArtSink, - fd_sink: FdArtSink, - win_sink: WinArtSink, - mac_sink: MacArtSink, -) -> None: - jpg_image = base_src.pull(env) - - jpg_image_inner = bitmap_src.pull(env) - with jpg_image_inner: - # crop the area which is interested by ourselves - interest_area = Rectangle.from_pos_size_rect(Point(2700, 0), 5016, 3888) - crop_jpg_image_inner = jpg_image_inner.crop(interest_area.to_tuple()) - # do a flip - flip_jpg_image_inner = crop_jpg_image_inner.transpose( - PIL.Image.Transpose.FLIP_LEFT_RIGHT - ) - # enhance its saturation - enhancer = PIL.ImageEnhance.Color(flip_jpg_image_inner) - saturated_jpg_image_inner = enhancer.enhance(1.4) - - # fit to inner rect - bestfit_jpg_image_inner = aspect_ratio_scale_and_crop( - saturated_jpg_image_inner, - IMAGE_INNER_RECT.width, - IMAGE_INNER_RECT.height, - PIL.Image.Resampling.NEAREST, - HorizontalAnchor.Center, - VerticalAnchor.Center, - ) - # paste into inner rect - jpg_image.paste(bestfit_jpg_image_inner, IMAGE_INNER_RECT.to_tuple()) - - # build artifacts - # save as temporary for future use - temp_sink.push(env, jpg_image) - # save for FD - fd_sink.push(env, jpg_image) - # save for windows and mac - win_sink.push(env, jpg_image) - mac_sink.push(env, jpg_image) + pass diff --git a/tool/src/aurora_iconset_builder/std_icons/components.py b/tool/src/aurora_iconset_builder/std_icons/components.py index cec9581..6f75418 100644 --- a/tool/src/aurora_iconset_builder/std_icons/components.py +++ b/tool/src/aurora_iconset_builder/std_icons/components.py @@ -18,14 +18,6 @@ def register(ctx: AuroraContext) -> None: ), build_generic_background, ) - ctx.register( - "component/image-base", - ( - SvgSource("component", "image-base.svg"), - TempArtSink("component", "image-base.png"), - ), - build_image_base_icon, - ) ctx.register( "component/triangles", ( @@ -67,12 +59,6 @@ def build_generic_background( src.pull_to_temp(env, sink) -def build_image_base_icon( - env: AuroraEnvironment, src: SvgSource, sink: TempArtSink -) -> None: - src.pull_to_temp(env, sink) - - def build_triangle_icons( env: AuroraEnvironment, tri_src: SvgSource, diff --git a/tool/src/aurora_iconset_builder/std_icons/mimetype_icons.py b/tool/src/aurora_iconset_builder/std_icons/mimetype_icons.py index 62c3417..7262c39 100644 --- a/tool/src/aurora_iconset_builder/std_icons/mimetype_icons.py +++ b/tool/src/aurora_iconset_builder/std_icons/mimetype_icons.py @@ -1,10 +1,32 @@ +import PIL.Image +import PIL.ImageEnhance from ..types import AuroraContext, AuroraEnvironment -from ..assemblicon.highlevel.utils import FdContext -from ..assemblicon.highlevel.source import FdArtSource -from ..assemblicon.highlevel.sink import FdArtSink +from ..assemblicon.highlevel.utils import FdContext, WinCategory, MacCategory +from ..assemblicon.highlevel.source import ( + SvgSource, + BitmapSource, + TempArtSource, + FdArtSource, +) +from ..assemblicon.highlevel.sink import TempArtSink, FdArtSink, WinArtSink, MacArtSink +from ..assemblicon.geometry import Rectangle, Point +from ..assemblicon.lowlevel.artio import new_artifact +from ..assemblicon.lowlevel.artproc import ( + aspect_ratio_scale_and_crop, + VerticalAnchor, + HorizontalAnchor, +) def register(ctx: AuroraContext) -> None: + ctx.register( + "component/image-base", + ( + SvgSource("component", "image-base.svg"), + TempArtSink("component", "image-base.png"), + ), + build_image_base_icon, + ) ctx.register( "std/mimetype/image-x-generic", ( @@ -13,6 +35,59 @@ def register(ctx: AuroraContext) -> None: ), build_image_x_generic, ) + ctx.register( + "std/mimetype/image-jpeg", + ( + TempArtSource("component", "image-base.png"), + BitmapSource("bitmap", "Niinsaare_järv.jpg"), + TempArtSink("image-jpeg.png"), + FdArtSink(FdContext.MimeTypes, "image-jpeg"), + WinArtSink(WinCategory.Extension, "jpg"), + MacArtSink(MacCategory.Extension, "jpg"), + ), + build_image_jpeg_icon, + ) + ctx.register( + "std/mimetype/image-png", + ( + TempArtSource("component", "image-base.png"), + BitmapSource("bitmap", "Tulipa_suaveolens_floriade_to_Canberra.jpg"), + BitmapSource("bitmap", "Tulipa_suaveolens_floriade_to_Canberra-mask.png"), + SvgSource("image-png-checkerboard.svg"), + FdArtSink(FdContext.MimeTypes, "image-png"), + WinArtSink(WinCategory.Extension, "png"), + MacArtSink(MacCategory.Extension, "png"), + ), + build_image_png_icon, + ) + ctx.register( + "std/mimetype/image-bmp", + ( + TempArtSource("component", "image-base.png"), + BitmapSource("bitmap", "Van_Gogh_-_Starry_Night_-_Google_Art_Project.jpg"), + FdArtSink(FdContext.MimeTypes, "image-bmp"), + WinArtSink(WinCategory.Extension, "bmp"), + MacArtSink(MacCategory.Extension, "bmp"), + ), + build_image_bmp_icon, + ) + ctx.register( + "std/mimetype/image-gif", + ( + TempArtSource("component", "image-base.png"), + BitmapSource("bitmap", "Hot-air_balloon_in_Tambov_-_02.jpg"), + FdArtSink(FdContext.MimeTypes, "image-gif"), + WinArtSink(WinCategory.Extension, "gif"), + MacArtSink(MacCategory.Extension, "gif"), + ), + build_image_gif_icon, + ) + + +def build_image_base_icon( + env: AuroraEnvironment, src: SvgSource, sink: TempArtSink +) -> None: + src.pull_to_temp(env, sink) def build_image_x_generic( @@ -20,3 +95,176 @@ def build_image_x_generic( ) -> None: # use image/jpeg as the default image icon src.link_to(env, sink) + + +IMAGE_INNER_RECT = Rectangle(Point(20 * 4, 52 * 4), Point(236 * 4, 204 * 4)) +"""The valid region of image-base for putting inner image.""" + + +def build_image_jpeg_icon( + env: AuroraEnvironment, + base_src: TempArtSource, + bitmap_src: BitmapSource, + temp_sink: TempArtSink, + fd_sink: FdArtSink, + win_sink: WinArtSink, + mac_sink: MacArtSink, +) -> None: + jpg_image = base_src.pull(env) + + jpg_image_inner = bitmap_src.pull(env) + with jpg_image_inner: + # crop the area which is interested by ourselves + interest_area = Rectangle.from_pos_size_rect(Point(2700, 0), 5016, 3888) + crop_jpg_image_inner = jpg_image_inner.crop(interest_area.to_tuple()) + # do a flip + flip_jpg_image_inner = crop_jpg_image_inner.transpose( + PIL.Image.Transpose.FLIP_LEFT_RIGHT + ) + # enhance its saturation + enhancer = PIL.ImageEnhance.Color(flip_jpg_image_inner) + saturated_jpg_image_inner = enhancer.enhance(1.4) + + # fit to inner rect + bestfit_jpg_image_inner = aspect_ratio_scale_and_crop( + saturated_jpg_image_inner, + IMAGE_INNER_RECT.width, + IMAGE_INNER_RECT.height, + PIL.Image.Resampling.NEAREST, + HorizontalAnchor.Center, + VerticalAnchor.Center, + ) + # paste into inner rect + jpg_image.paste(bestfit_jpg_image_inner, IMAGE_INNER_RECT.to_tuple()) + + # build artifacts + # save as temporary for future use + temp_sink.push(env, jpg_image) + # save for FD + fd_sink.push(env, jpg_image) + # save for windows and mac + win_sink.push(env, jpg_image) + mac_sink.push(env, jpg_image) + + +def build_image_png_icon( + env: AuroraEnvironment, + base_src: TempArtSource, + bitmap_src: BitmapSource, + bitmap_mask_src: BitmapSource, + checkerboard_src: SvgSource, + fd_sink: FdArtSink, + win_sink: WinArtSink, + mac_sink: MacArtSink, +) -> None: + png_image = base_src.pull(env) + + bitmap = bitmap_src.pull(env) + bitmap_mask = bitmap_mask_src.pull(env) + checkerboard = checkerboard_src.pull(env) + + with bitmap, bitmap_mask, checkerboard: + # mask bitmap first + # force mask as grayscale format to apply black-white mask instead of alpha channel mask + bitmap_masked = new_artifact(bitmap.size) + bitmap_masked.paste(bitmap, (0, 0), bitmap_mask.convert("L")) + + # we use the whole image as the inner, + # so we directly fit it to inner. + bestfit_bitmap = aspect_ratio_scale_and_crop( + bitmap_masked, + IMAGE_INNER_RECT.width, + IMAGE_INNER_RECT.height, + PIL.Image.Resampling.NEAREST, + HorizontalAnchor.Center, + VerticalAnchor.Top, + ) + # TODO: When bestfit this checkerboard, the border of this checkerboard aer lost. + # We may need resolve this in future but currently it is so subtle to notice. + bestfit_checkerboard = aspect_ratio_scale_and_crop( + checkerboard, + IMAGE_INNER_RECT.width, + IMAGE_INNER_RECT.height, + PIL.Image.Resampling.NEAREST, + HorizontalAnchor.Center, + VerticalAnchor.Center, + ) + + # composite them together + png_image.alpha_composite( + bestfit_checkerboard, IMAGE_INNER_RECT.pos1.to_tuple() + ) + png_image.alpha_composite(bestfit_bitmap, IMAGE_INNER_RECT.pos1.to_tuple()) + + # build artifacts + # save for FD + fd_sink.push(env, png_image) + # save for windows and mac + win_sink.push(env, png_image) + mac_sink.push(env, png_image) + + +def build_image_bmp_icon( + env: AuroraEnvironment, + base_src: TempArtSource, + bitmap_src: BitmapSource, + fd_sink: FdArtSink, + win_sink: WinArtSink, + mac_sink: MacArtSink, +) -> None: + bmp_image = base_src.pull(env) + + bmp_image_inner = bitmap_src.pull(env) + with bmp_image_inner: + # we use the whole image as the inner, + # so we directly fit it to inner. + bestfit_inner = aspect_ratio_scale_and_crop( + bmp_image_inner, + IMAGE_INNER_RECT.width, + IMAGE_INNER_RECT.height, + PIL.Image.Resampling.NEAREST, + HorizontalAnchor.Center, + VerticalAnchor.Center, + ) + # paste into inner rect + bmp_image.paste(bestfit_inner, IMAGE_INNER_RECT.to_tuple()) + + # build artifacts + # save for FD + fd_sink.push(env, bmp_image) + # save for windows and mac + win_sink.push(env, bmp_image) + mac_sink.push(env, bmp_image) + + +def build_image_gif_icon( + env: AuroraEnvironment, + base_src: TempArtSource, + bitmap_src: BitmapSource, + fd_sink: FdArtSink, + win_sink: WinArtSink, + mac_sink: MacArtSink, +) -> None: + gif_image = base_src.pull(env) + + gif_image_inner = bitmap_src.pull(env) + with gif_image_inner: + # we use the whole image as the inner, + # so we directly fit it to inner. + bestfit_inner = aspect_ratio_scale_and_crop( + gif_image_inner, + IMAGE_INNER_RECT.width, + IMAGE_INNER_RECT.height, + PIL.Image.Resampling.NEAREST, + HorizontalAnchor.Center, + VerticalAnchor.Center, + ) + # paste into inner rect + gif_image.paste(bestfit_inner, IMAGE_INNER_RECT.to_tuple()) + + # build artifacts + # save for FD + fd_sink.push(env, gif_image) + # save for windows and mac + win_sink.push(env, gif_image) + mac_sink.push(env, gif_image) diff --git a/tool/src/aurora_iconset_builder/std_icons/status_icons.py b/tool/src/aurora_iconset_builder/std_icons/status_icons.py index aa569e8..7d69552 100644 --- a/tool/src/aurora_iconset_builder/std_icons/status_icons.py +++ b/tool/src/aurora_iconset_builder/std_icons/status_icons.py @@ -64,6 +64,8 @@ def build_dialog_warning_icon( def build_dialog_error_icon( env: AuroraEnvironment, src: SvgSource, temp_sink: TempArtSink, fd_sink: FdArtSink ) -> None: + # TODO: update this icon from rectangle to circle + # save dialog icon with FreeDesktop icon and temp icon for reuse. src.pull_to_temp(env, temp_sink) with temp_sink.repull(env) as art: