-## Creating the .ico (Windows) and .icns (macOS) files from PNG images in linux
+## There is now a script utils/mk_jalview_icons.sh that creates the .icns and .ico icon files, and also the rotatable icon.
+Run it as
+```
+mk_jalview_icons.sh <BASENAME>-512.png
+```
+Having an existing 512x512 PNG image with the above filename format is important.
+It will then create multiple files
+`<BASENAME>-<N>.png`
+for N being 16, 32, 38, 48, 64, 128, 256.
+**NB** You might want to edit these as described below. The `mk_jalview_icons.sh` will not overwrite these files, but it
+will overwrite the `.ico` and `.icns` files, so after editing the `<BASENAME>-<N>.png` files, just run the script again.
+
+As below, the script relies on ImageMagick and icnsutils being installed with `convert` and `png2icns` in the PATH.
+
+The rotatable logo will also be created (and overwritten) as
+`rotatable_<BASENAME>-38.png`
+
+
+## Old text
+### Creating the .ico (Windows) and .icns (macOS) files from PNG images in linux
Create multiple square versions of your icon at the following resolutions:
16x16, 32x32, 48x48, 64x64, 128x128, 256x256, 512x512
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 15.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="595.238px" height="595.238px" viewBox="0 0 595.238 595.238" enable-background="new 0 0 595.238 595.238"
- xml:space="preserve">
-<rect x="234.925" y="234.464" fill="#0084A9" width="127.944" height="127.942"/>
-<polygon fill="#AD208E" points="395.955,38.359 38.788,38.359 38.823,362.389 103.187,362.389 103.187,102.72 460.325,102.72 "/>
-<polygon fill="#F78E1E" points="202.144,362.313 202.144,201.678 559.28,201.678 497.633,140.041 140.481,140.041 140.481,362.313
- "/>
-<polygon fill="#009DDC" points="202.225,558.595 560.882,558.607 560.848,234.574 496.501,234.574 496.501,494.26 137.861,494.236
- "/>
-<polygon fill="#C1D82F" points="395.688,234.646 395.688,395.282 38.904,395.282 100.535,456.929 457.329,456.929 457.329,234.646
- "/>
-<polygon fill="#008FC9" points="205.667,554.03 554.448,554.03 554.412,240.517 544.805,240.615 544.805,545.863 197.488,545.863
- "/>
-<polyline fill="#B0C62B" points="103.158,450.545 452.339,450.545 452.339,240.505 445.537,240.505 445.537,443.737 96.374,443.737
- "/>
-<polygon fill="#007799" points="356.649,240.339 241.236,240.339 241.236,356.261 247.337,356.261 247.337,246.708 356.649,246.708
- "/>
-<polygon fill="#0095B7" points="251.131,356.191 356.649,356.191 356.649,250.696 350.543,250.696 350.543,350.185 251.131,350.185
- "/>
-<polygon fill="#B956A0" points="97.55,356.417 97.55,96.444 446.327,96.444 436.58,86.163 87.278,86.163 87.278,356.347 "/>
-<polygon fill="#35ABE1" points="502.531,240.517 502.414,499.929 151.207,499.929 160.779,509.2 512.916,509.2 512.823,240.485 "/>
-<polygon fill="#CDDE5C" points="402.263,240.345 402.263,401.857 53.901,401.857 59.797,407.742 408.142,407.742 408.142,240.345
- "/>
-<polygon fill="#911076" points="53.112,356.377 53.112,52.218 404.342,52.102 395.792,43.38 43.473,43.363 43.504,356.377 "/>
-<polygon fill="#F9A24A" points="197.059,356.365 197.059,196.854 546.188,196.854 540.054,190.97 191.181,190.97 191.181,356.365
- "/>
-<polygon fill="#E4841C" points="155.107,356.365 155.2,153.2 502.403,153.2 495.595,146.38 147.283,146.38 147.283,356.365 "/>
-<path fill="none" stroke="#000000" stroke-width="0.1" d="M41.451,391.681"/>
-<path fill="none" stroke="#000000" stroke-width="0.1" d="M211.905,562.132"/>
-</svg>
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ version="1.1"
+ id="Layer_1"
+ x="0px"
+ y="0px"
+ width="522.09399"
+ height="522.09399"
+ viewBox="0 0 522.09402 522.09402"
+ enable-background="new 0 0 595.238 595.238"
+ xml:space="preserve"
+ sodipodi:docname="jalview_test-release_logo.svg"
+ inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"><metadata
+ id="metadata41"><rdf:RDF><cc:Work
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+ id="defs39" /><sodipodi:namedview
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1"
+ objecttolerance="10"
+ gridtolerance="10"
+ guidetolerance="10"
+ inkscape:pageopacity="0"
+ inkscape:pageshadow="2"
+ inkscape:window-width="2569"
+ inkscape:window-height="1721"
+ id="namedview37"
+ showgrid="false"
+ fit-margin-top="0"
+ fit-margin-left="0"
+ fit-margin-right="0"
+ fit-margin-bottom="0"
+ inkscape:zoom="2.24283"
+ inkscape:cx="258.83099"
+ inkscape:cy="260.988"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="Layer_1" />
+<rect
+ x="196.13701"
+ y="197.95102"
+ width="127.944"
+ height="127.942"
+ id="rect2"
+ style="fill:#0084a9" />
+<polygon
+ points="38.823,362.389 103.187,362.389 103.187,102.72 460.325,102.72 395.955,38.359 38.788,38.359 "
+ id="polygon4"
+ style="fill:#ad208e"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="559.28,201.678 497.633,140.041 140.481,140.041 140.481,362.313 202.144,362.313 202.144,201.678 "
+ id="polygon6"
+ style="fill:#f78e1e"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="560.848,234.574 496.501,234.574 496.501,494.26 137.861,494.236 202.225,558.595 560.882,558.607 "
+ id="polygon8"
+ style="fill:#009ddc"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="38.904,395.282 100.535,456.929 457.329,456.929 457.329,234.646 395.688,234.646 395.688,395.282 "
+ id="polygon10"
+ style="fill:#c1d82f"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="554.412,240.517 544.805,240.615 544.805,545.863 197.488,545.863 205.667,554.03 554.448,554.03 "
+ id="polygon12"
+ style="fill:#008fc9"
+ transform="translate(-38.788,-36.512996)" />
+<polyline
+ points="103.158,450.545 452.339,450.545 452.339,240.505 445.537,240.505 445.537,443.737 96.374,443.737 "
+ id="polyline14"
+ style="fill:#b0c62b"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="241.236,356.261 247.337,356.261 247.337,246.708 356.649,246.708 356.649,240.339 241.236,240.339 "
+ id="polygon16"
+ style="fill:#007799"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="356.649,250.696 350.543,250.696 350.543,350.185 251.131,350.185 251.131,356.191 356.649,356.191 "
+ id="polygon18"
+ style="fill:#0095b7"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="446.327,96.444 436.58,86.163 87.278,86.163 87.278,356.347 97.55,356.417 97.55,96.444 "
+ id="polygon20"
+ style="fill:#b956a0"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="151.207,499.929 160.779,509.2 512.916,509.2 512.823,240.485 502.531,240.517 502.414,499.929 "
+ id="polygon22"
+ style="fill:#35abe1"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="53.901,401.857 59.797,407.742 408.142,407.742 408.142,240.345 402.263,240.345 402.263,401.857 "
+ id="polygon24"
+ style="fill:#cdde5c"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="404.342,52.102 395.792,43.38 43.473,43.363 43.504,356.377 53.112,356.377 53.112,52.218 "
+ id="polygon26"
+ style="fill:#911076"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="546.188,196.854 540.054,190.97 191.181,190.97 191.181,356.365 197.059,356.365 197.059,196.854 "
+ id="polygon28"
+ style="fill:#f9a24a"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="502.403,153.2 495.595,146.38 147.283,146.38 147.283,356.365 155.107,356.365 155.2,153.2 "
+ id="polygon30"
+ style="fill:#e4841c"
+ transform="translate(-38.788,-36.512996)" />
+<path
+ d="M 2.663,355.168"
+ id="path32"
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:#000000;stroke-width:0.1" />
+
+</svg>
\ No newline at end of file
id="Layer_1"
x="0px"
y="0px"
- width="522.492"
- height="522.492"
- viewBox="0 0 522.49203 522.49203"
+ width="522.09399"
+ height="522.09399"
+ viewBox="0 0 522.09402 522.09402"
enable-background="new 0 0 595.238 595.238"
xml:space="preserve"
- sodipodi:docname="jalview_test_logo4.svg"
+ sodipodi:docname="jalview_test-release_logo.svg"
inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
- inkscape:export-filename="/home/bsoares/Work/git/develop/jalview/utils/channels/test-release/images/jalview_test_logo4.png"
+ inkscape:export-filename="/home/bsoares/Work/git/develop/jalview/utils/channels/tmp/jalview_test-release_logo-512.png"
inkscape:export-xdpi="94.139999"
inkscape:export-ydpi="94.139999"><metadata
id="metadata41"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs39" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
- inkscape:window-width="2969"
- inkscape:window-height="1993"
+ inkscape:window-width="2569"
+ inkscape:window-height="1721"
id="namedview37"
showgrid="false"
- inkscape:zoom="3.1731568"
- inkscape:cx="264.53652"
- inkscape:cy="257.22436"
- inkscape:window-x="0"
- inkscape:window-y="0"
- inkscape:window-maximized="0"
- inkscape:current-layer="layer2"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
- fit-margin-bottom="0" />
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<g
- inkscape:groupmode="layer"
- id="layer1"
- inkscape:label="Layer 1"
- style="display:inline"
- transform="translate(-38.654543,-32.351345)"><path
- style="fill:#ad208e"
- d="M 393.82154,34.595359 H 38.654543 l 0.035,358.030001 h 82.363997 v -275.669 h 355.138 z"
- id="polygon4"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccc" /><path
- style="fill:#009ddc"
- d="m 204.09154,554.83136 356.657,0.012 -0.034,-356.929 h -84.347 v 272.582 l -356.64,-0.024 z"
- id="polygon8"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccc" /><path
- style="fill:#008fc9"
- d="m 205.53354,550.26636 h 348.781 l -0.036,-348.352 h -9.607 v 340.185 h -347.317 z"
- id="polygon12"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccc" /><path
- style="fill:#b956a0"
- d="m 115.41654,386.65336 v -275.973 h 348.777 l -9.747,-10.281 h -349.302 v 286.184 z"
- id="polygon20"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccc" /><path
- style="fill:#35abe1"
- d="m 482.39754,201.91436 -0.117,274.251 h -351.207 l 9.572,9.271 h 352.137 l -0.093,-283.522 z"
- id="polygon22"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccc" /><path
- style="fill:#911076"
- d="M 52.978543,386.61336 V 48.454359 l 351.229997,-0.116 -8.55,-8.722 -352.318997,-0.017 0.031,347.014001 z"
- id="polygon26"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccc" /><g
- id="g976"><path
- sodipodi:nodetypes="ccccccc"
- inkscape:connector-curvature="0"
- id="polygon6"
- d="m 202.01054,392.54936 v -194.635 h 359.136 l -85.647,-81.637 h -355.152 v 276.272 z"
- style="fill:#f78e1e" /><path
- sodipodi:nodetypes="ccccccc"
- inkscape:connector-curvature="0"
- id="polygon28"
- d="m 196.92554,386.60136 v -193.511 h 351.129 l -6.134,-5.884 h -350.873 v 199.395 z"
- style="fill:#f9a24a" /><path
- sodipodi:nodetypes="ccccccc"
- inkscape:connector-curvature="0"
- id="polygon30"
- d="m 134.97354,386.60136 0.093,-257.165 h 345.203 l -6.808,-6.82 h -346.312 v 263.985 z"
- style="fill:#e4841c" /></g><path
- inkscape:connector-curvature="0"
- style="fill:none;stroke:#000000;stroke-width:0.1"
- d="M 41.317543,387.91736"
- id="path32" /><path
- inkscape:connector-curvature="0"
- style="fill:none;stroke:#000000;stroke-width:0.1"
- d="M 211.77154,558.36836"
- id="path34" /></g><g
- inkscape:groupmode="layer"
- id="layer2"
- inkscape:label="Layer 2"
- style="display:inline"
- transform="translate(-38.654543,-32.351345)"><path
- style="display:inline;fill:#c1d82f"
- d="m 395.55454,192.88236 v 198.636 H 38.770543 l 81.630997,79.647 h 356.794 v -278.283 z"
- id="polygon10"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccc" /><path
- style="display:inline;fill:#b0c62b"
- d="m 123.02454,464.78136 h 349.181 v -262.04 h -6.802 v 255.232 h -349.163"
- id="polyline14"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccc" /><path
- style="display:inline;fill:#cdde5c"
- d="m 402.12954,202.58136 v 195.512 H 53.767543 l 5.896,5.885 H 408.00854 v -201.397 z"
- id="polygon24"
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccc" /></g><g
- inkscape:groupmode="layer"
- id="layer3"
- inkscape:label="Layer 3"
- style="display:inline"
- transform="translate(-38.654543,-32.351345)"><g
- id="g971"><path
- sodipodi:nodetypes="ccccccc"
- inkscape:connector-curvature="0"
- id="polygon6-3"
- d="m 202.01054,226.54936 v -28.635 h 275.451 l -2,-81.637 h -355.114 v 110.272 z"
- style="display:inline;fill:#f78e1e" /><path
- sodipodi:nodetypes="ccccccc"
- inkscape:connector-curvature="0"
- id="polygon28-6"
- d="m 196.92554,226.54936 v -33.459 h 280.536 v -5.884 h -286.414 v 39.343 z"
- style="display:inline;fill:#f9a24a" /><path
- sodipodi:nodetypes="ccccccc"
- inkscape:connector-curvature="0"
- id="polygon30-7"
- d="m 134.97354,226.54936 0.093,-97.113 h 340.395 v -6.82 h -348.312 v 103.933 z"
- style="display:inline;fill:#e4841c" /></g></g></svg>
\ No newline at end of file
+ fit-margin-bottom="0"
+ inkscape:zoom="0.56070751"
+ inkscape:cx="258.83099"
+ inkscape:cy="260.988"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="0"
+ inkscape:current-layer="Layer_1" />
+<rect
+ x="196.13701"
+ y="197.95102"
+ width="127.944"
+ height="127.942"
+ id="rect2"
+ style="fill:#ffffff;fill-opacity:1" />
+<polygon
+ points="38.823,362.389 103.187,362.389 103.187,102.72 460.325,102.72 395.955,38.359 38.788,38.359 "
+ id="polygon4"
+ style="fill:#ad208e"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="559.28,201.678 497.633,140.041 140.481,140.041 140.481,362.313 202.144,362.313 202.144,201.678 "
+ id="polygon6"
+ style="fill:#f78e1e"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="560.848,234.574 496.501,234.574 496.501,494.26 137.861,494.236 202.225,558.595 560.882,558.607 "
+ id="polygon8"
+ style="fill:#009ddc"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="38.904,395.282 100.535,456.929 457.329,456.929 457.329,234.646 395.688,234.646 395.688,395.282 "
+ id="polygon10"
+ style="fill:#c1d82f"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="554.412,240.517 544.805,240.615 544.805,545.863 197.488,545.863 205.667,554.03 554.448,554.03 "
+ id="polygon12"
+ style="fill:#008fc9"
+ transform="translate(-38.788,-36.512996)" />
+<polyline
+ points="103.158,450.545 452.339,450.545 452.339,240.505 445.537,240.505 445.537,443.737 96.374,443.737 "
+ id="polyline14"
+ style="fill:#b0c62b"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="241.236,356.261 247.337,356.261 247.337,246.708 356.649,246.708 356.649,240.339 241.236,240.339 "
+ id="polygon16"
+ style="fill:#d4d4d4;fill-opacity:1"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="356.649,250.696 350.543,250.696 350.543,350.185 251.131,350.185 251.131,356.191 356.649,356.191 "
+ id="polygon18"
+ style="fill:#f1f1f1;fill-opacity:1"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="446.327,96.444 436.58,86.163 87.278,86.163 87.278,356.347 97.55,356.417 97.55,96.444 "
+ id="polygon20"
+ style="fill:#b956a0"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="151.207,499.929 160.779,509.2 512.916,509.2 512.823,240.485 502.531,240.517 502.414,499.929 "
+ id="polygon22"
+ style="fill:#35abe1"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="53.901,401.857 59.797,407.742 408.142,407.742 408.142,240.345 402.263,240.345 402.263,401.857 "
+ id="polygon24"
+ style="fill:#cdde5c"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="404.342,52.102 395.792,43.38 43.473,43.363 43.504,356.377 53.112,356.377 53.112,52.218 "
+ id="polygon26"
+ style="fill:#911076"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="546.188,196.854 540.054,190.97 191.181,190.97 191.181,356.365 197.059,356.365 197.059,196.854 "
+ id="polygon28"
+ style="fill:#f9a24a"
+ transform="translate(-38.788,-36.512996)" />
+<polygon
+ points="502.403,153.2 495.595,146.38 147.283,146.38 147.283,356.365 155.107,356.365 155.2,153.2 "
+ id="polygon30"
+ style="fill:#e4841c"
+ transform="translate(-38.788,-36.512996)" />
+<path
+ d="M 2.663,355.168"
+ id="path32"
+ inkscape:connector-curvature="0"
+ style="fill:none;stroke:#000000;stroke-width:0.1" />
+
+</svg>
\ No newline at end of file
+++ /dev/null
-#!/usr/bin/env bash
-
-# given a list of differently sized png files with the size in the filename like this:
-# myiconfile-16.png myiconfile-32.png myiconfile-48.png myiconfile-64.png myiconfile-128.png myiconfile-256.png myiconfile-512.png
-# run
-# create_iconfiles.sh myiconfile-*.png
-# to create an ICO file (for Windows) myiconfile.ico and an ICNS file (for macOS) myiconfile.icns
-
-BASENAME=${1%-*}
-if [ x$BASENAME = x ]; then
- echo "Could not calculate basename from '${1}'"
- exit 1
-fi
-
-ICOFILE=${BASENAME}.ico
-echo "Creating ${ICOFILE}"
-convert $* ${ICOFILE}
-
-ICNSFILE=${BASENAME}.icns
-echo "Creating ${ICNSFILE}"
-# dont' include 64x64 icon (for some reason they're not allowed in icns file)
-ICNSARGS=""
-for ARG in $*; do
- NUM=${ARG##*-}
- NUM=${NUM%px*}
- NUM=${NUM%x*}
- NUM=${NUM%.*}
- if [ x$NUM != x64 -a x$NUM != x38 ]; then
- ICNSARGS="${ICNSARGS} $ARG"
- fi
-done
-png2icns ${ICNSFILE} ${ICNSARGS}
--- /dev/null
+#!/usr/bin/env bash
+
+FILENAME512=$1
+BASENAME=${FILENAME512%-512.png}
+
+usage () {
+ echo "$(basename "$0") <LOGO_NAME>-512.png"
+}
+
+[ "$1" = "-h" ] && usage && exit 0
+[ -r "$FILENAME512" ] || ( usage && echo "'${FILENAME512}' must exist and be readable" && exit 1 )
+[ "$BASENAME" = "$FILENAME512" ] && usage && echo "Must have '-512.png' at end of filename" && exit 2
+
+set -e
+
+SIZES="16 32 38 48 64 128 256"
+declare -a ICOFILES=()
+declare -a ICNSFILES=()
+for n in $SIZES
+do
+ NEWFILE="${BASENAME}-${n}.png"
+ [ -e "{$NEWFILE}" ] && continue
+ convert -geometry "${n}x${n}" "${BASENAME}-512.png" "${NEWFILE}"
+ [ "${n}" != 38 ] && ICOFILES=( "${ICOFILES[@]}" "${NEWFILE}" )
+ [ "${n}" != 64 ] && [ "${n}" != 38 ] && ICNSFILES=( "${ICNSFILES[@]}" "${NEWFILE}" )
+done
+
+# make the .ico
+ICOFILE="${BASENAME}.ico"
+echo "Creating ${ICOFILE}"
+convert "${ICOFILES[@]}" "${ICOFILE}"
+
+# make the .icns
+ICNSFILE="${BASENAME}.icns"
+echo "Creating ${ICNSFILE}"
+png2icns "${ICNSFILE}" "${ICNSFILES[@]}"
+
+# make the rotatable icon
+ROTATABLEFILE="rotatable_${BASENAME}-38.png"
+convert "${BASENAME}-38.png" -gravity center -background white -extent 60x60 "${ROTATABLEFILE}"
+
+exit 0