A multi platform image density converting tool converting single or batches of images to Android, iOS, Windows or CSS specific formats and density versions given the source scale factor or width/height in dp. It has a graphical and command line interface and supports many image types (svg, psd, 9-patch, etc.) aswell as some lossless compressors like pngcrush.

Overview

logo Density Image Converter Tool for Android, iOS, Windows and CSS

This is a powerful little tool that helps converting single or batches of images to Android, iOS, Windows and CSS specific formats and density versions given the source scale factor or target width/height in dp. It has a graphical and command line interface and supports a wide array of image types for reading and conversion including PNG, JPEG, SVG, PSD and Android 9-patches. Using sophisticated scaling algorithms, it is designed to make conversion of images easy and fast while keeping the image quality high (comparable to PS). To further optimize the output post processors like pngcrush and mozJpeg can be used (see section below).

GitHub release Build Status Coverage Status Maintainability

Usage:

java -jar ./dconvert.jar -src "C:/your-folder/image-folder" -scale 4

while

java -jar ./dconvert.jar

will start the UI (or double click the jar file).

To use the post processor (pngcrush, mozJpeg and webp) the respective cmd tool must be set in PATH.

Download

Grab jar from latest release.

Requirements

  • JDK 11

Usage

GUI

Start with

java -jar ./dconvert.jar

provides the same features as the command line tool so see the help page of command line or tooltips. Additionally the UI will save its settings persistently making it easier for power users.

gui-screenshot

Command Line

E.g. with xxxhdpi (x4) source files:

java -jar ./dconvert.jar -src "C:/master-image/ic_my_icon.png" -scale 4 -platform android

Will generate mdpi, hdpi, etc. folders in "C:/master-image/" containing the resized images

Full list of arguments:

-androidIncludeLdpiTvdpi              Android only: creates mipmap sub-folders instead of drawable.
-androidMipmapInsteadOfDrawable       Android only: If set will include additional densities (ldpi and
                                      tvdpi)
-antiAliasing                         Anti-aliases images creating a little more blurred result; a light
                                      3x3 convolve matrix is used; useful for very small images
-clean                                Deletes all file and folders in out dir that would be used in
                                      current configuration before converting.
-compressionQuality <0.0-1.0>         Only used with compression 'jpg' sets the quality [0-1.0] where 1.0
                                      is the highest quality. Default is 0.9
-dryRun                               Will not create any images or folder. Useful as fast preview in log
                                      what images in what resolutions would be created.
-dst <path>                           The directory in which the converted files will be written. Will use
                                      the source folder if this argument is omitted.
-gui                                  Starts graphical user interface
-h,--help                             This help page
-haltOnError                          If set will stop the process if an error occurred during conversion
-iosCreateImagesetFolders             iOS only: Will create .imageset folders and Content.json for every
                                      source image n iOS converter. Default is just all images in the root
                                      folder.
-keepOriginalPostProcessedFiles       If a post processor is run on a file, this flag will ensure that the
                                      original will be kept (renamed _orig), otherwise only the optimized
                                      image will be kept
-outCompression <png|jpg|gif|bmp>     Sets the compression of the converted images. Can be 'png', 'jpg',
                                      'gif', 'bmp', 'png+jpg' or 'strict' which tries to use same
                                      compression as source. By default will convert to png except if
                                      source compression is jpeg.
-platform <all|android|ios|win|web>   Can be 'all', 'android', 'ios', 'win' or 'web'. Sets what formats
                                      the converted images will be generated for. E.g. set 'android' if
                                      you only want to convert to android format. Default is [IOS,
                                      ANDROID]
-postProcessorMozJpeg                 Will post-process all jpegs with mozJpegs lossless compressor
                                      'jpegtran'. Mozjpeg (specifically 'jpegtran') must be set in PATH,
                                      tested with mozJpeg 3. Binaries for mozJpeg can be found on the
                                      internet.
-postProcessorPngCrush                Will post-process all pngs with pngcrush, a lossless compressor. The
                                      executable must be set in the system PATH as 'pngcrush' i.e
                                      executable from every path. Pngcrush is a tool to compress pngs.
                                      Requires v1.7.22+
-postProcessorWebp                    Will additionally convert all png/gif to lossless wepb and all jpg
                                      to lossy webp with cwebp. Does not delete source files. The
                                      executable must be set in the system path as 'cwebp' i.e executable
                                      from every path. cwebp is the official converter from Google.
-roundingMode <round|ceil|floor>      Defines the rounding mode when scaling the dimensions. Possible
                                      options are 'round' (rounds up of >= 0.5), 'floor' (rounds down) and
                                      'ceil' (rounds up). Default is ROUND_HALF_UP
-scale <[float]|[int]dp>              The source. Can be an image file or a folder containing image files
                                      to be converted. This argument is mandatory.
-scaleIsHeightDp                      If set and scale is in dp it will be interpreted as fixed height not
                                      width
-skipExisting                         If set will not overwrite a already existing file
-skipUpscaling                        If set will only scale down, but not up to prevent image quality
                                      loss
-src <path to file or folder>         The source scale. This can either be a factor (1,1.5,2,3,4,etc.)
                                      used if the images already have the correct resolution for one scale
                                      factor and up- and downscaling for all other densities are needed.
                                      Ie. if you have the src file in density xxxhdpi you pass '4'. You
                                      could also pass a value in dp (density independent pixels) which
                                      denotes the output pixel width (or height if the flag is set) in
                                      mdpi/x1. In this mode all output images will have the same width
                                      (height). This argument is mandatory.
-threads <1-8>                        Sets the count of max parallel threads (more is faster but uses more
                                      memory). Possible values are 1-8. Default is 4
-v,--version                          Gets current version
-verbose                              If set will log to console more verbose

Using the .exe Launcher

Launch4J is used to create Windows executables. Two types are available: dconvert.exe and dconvert-gui.exe. The former is for command line, the later as a simple GUI starter. Launch4J will automatically download the required JRE.

Details

Scale Factor vs. Fixed DP Width/Height

There are 2 modes available for the user:

Scale Factor Mode

This mode is based on the idea that a developer gets the 'master' images in the highest needed resolution for his platform, e.g. xxxhdpi (x4) in Android. He then proceeds to generate every other density with it.

To better understand, here is a practical example for Android: Source file is ic_my_icon.png in density xxxhdpi with resolution 144x144 (this will be 36dp x 36dp). The tool will generate the following images in the following resolutions:

* mdpi 36x36 (x1)
* hdpi 54x54 (x1.5)
* xhdpi 72x72 (x2)
* xxhdpi 108x108 (x3)
* xxxhdpi 144x144 (x4)

Fixed Width/Height in DP Mode

This mode is suitable if the source image is in an arbitrary resolution (but usually greater resolution than needed) and the needed density independent pixel (dp) dimensions are known to the developer. Either the width or height can be fixed with a dp value, while calculating the other dimension accordingly (keeping aspect ratio). In this mode all images will have the same pixel width (or height) for the same density bucket. Here is a practical example with fixed width:

You get an icon in 512x512 and want to display it in 48x48dp. The tool will generate the following resolutions:

* mdpi 48x48 (x1)
* hdpi 72x72 (x1.5)
* xhdpi 108x108 (x2)
* xxhdpi 144x144 (x3)
* xxxhdpi 192x192 (x4)

Supported Platforms

This tool can convert to formats used in Android, iOS and Windows:

  • Android: The Android converter will create drawable-ldpi, drawable-mdpi, etc. folders and saves images with the original name and respective scale factor in there. 9-Patches are specifically supported for Android - must have .9.png extension and only size correctly if out-compression is PNG.
  • iOS: The iOS converter will either create a folder for each image with the .imageset postfix and 3 images in them with no, @2x and @3x postfix also including is the Content.json; or creates a single folder AssetCatalog with all the images in it.
  • Windows: The Windows converter will create an Assets folder containing all the images with .scale-100, .scale-140 etc. postfixes. This should be compatible with Windows universal apps.
  • Web: The web converter will create an img folder containing all the images with a 1x and a 2x scale factor which is compatible with the css image-set definition for multiple densities.

There are some options that might change the format of the output. See cmd help or tooltips for more info.

Supported File Types

This tool can read & write the following file types:

  • PNG - read and write support (including 9-patches format)
  • JPEG - read and write support with quality parameter
  • GIF - read and write support (no animation support)
  • SVG - can read svg, will compress with png per default
  • PSD - can read some Photoshop files, will compress with png per default
  • TIFF - read and write support
  • BMP - read and write support

Details on the supported features of each format see here.

Out-compression has the following modes:

  • as input (prefer png): jpegs will output jpeg, all other types png
  • as input (strict): except PSD & SVG which will use png, every file will be compressed with the source compression
  • [force compression]: jpeg, png, gif and bmp can be forced

If an image will be re-compressed with a file type that does not support alpha, alpha will be replaced with white (e.g. when converting png -> jpeg)

Quality Comparison

Note this will be available in future versions.

One of the main features of this converter is downscaling. Unfortunately without using specialized algorithms, down scaled images may look jagged or too blurred. I tested the algorithms of Thumbnailator and imgscalr which basically uses Chris Campbell's proposed progressive scaling algorithm. Upon further analysis Lanczos3 filtering seems to be recommended which produces results preserving more detail without being too jagged. The downside is, it is considerably slower than the former. This tool uses the implementation of Morten Nobel.

The tool provides 3 quality profiles:

  • High Quality: uses Lanczos3 filtering (8 times slower than Balanced)
  • Balanced: uses progressive bilinear algorithm for downscaling and bicubic filtering for upscaling (6 times slower than speed)
  • Speed: uses nearest neighbor algorithm

In most cases Lanczos3 creates best results, although in some cases progressive bilinear scaling may be superior for very sharp edges of e.g. simple icons where the former creates some softness. Here are some example to see the difference yourself. The icons are down-scaled from 96x96 to 72x72 and 48x48, the photos from different source from 500 to 2000 px.

comparison comparison

comparison comparison

As reference, here are the results of other methods:

comparison-ldpi

  1. Thumbnailator with default settings (progressive bilinear)
  2. Photoshop CS5 with bicubic algorithm
  3. imgscalr with ULTRA_QUALITY setting (progressive bilinear)
  4. simple Graphics2d with render hints VALUE_INTERPOLATION_BICUBIC, VALUE_RENDER_QUALITY, VALUE_ANTIALIAS_ON

Post Processors

The converter tool supports some post processors which run after the main conversation task to manipulate the resulting files. Post processors can be easily implemented by implementing the PostProcessor interface.

pngcrush

Pngcrush is a brute force png lossless compression tool. This may be already in your build chain (Android does this automatically), but may be useful if not. Will run pngcrush over the all converted *.png files. See code or output for specific used options.

The converter tool requires pngcrush to be in PATH. Minimal required version is 1.7.22; currently tested with v1.7.87 & 1.8.0. More info on the pngcrush wesbite

webp

WebP is an image format employing both lossy and lossless compression developed by Google. It is natively supported in Android and claims to be 25-35% smaller in file size than png and jpeg (in their respective categories).

If the flag is set the converter tool will compress jpegs to lossy webp and png/gif to lossless version of it. The program cwebp, which can be downloaded from Google's page, must be set in PATH variable.

More info on webp

mozJpeg

MozJpeg is a Jpeg encoder that also features some lossless compression techniques developed by the Mozilla foundation. It can be used to further shrink jpegs in size. Unfortunately they do not provide binaries on github, but they can be found e.g. here. The tool requires jpegtran to be set in PATH. Tested with mozJpeg 3.1

More info on mozJpeg

Implementation Details

Java 11, JavaFx and Apache CLI

For support of various image types TwelveMonkey lib is used which claims to have wider support of even basic file types (jpeg, etc.)

For parallel execution, every source file spawns his own thread for each platform converter e.g. 3 files 2 converters -> 6 threads needed.

The tool can easily be extended by using the IPlatformConvert and PostProcessor interfaces.

Both user interfaces use the same underlying logic.

Limitations & Known Issues

  • You tell me

Possible Future Features

  • change SVG source resolution to max needed resolution so no upscaling is needed

How to build

Use the Maven wrapper to create a jar including all dependencies

mvnw clean package

The .jar file will be in the generated /target folder

Checkstyle Config File

This project uses my common-parent which centralized a lot of the plugin versions aswell as providing the checkstyle config rules. Specifically they are maintained in checkstyle-config. Locally the files will be copied after you mvnw install into your target folder and is called target/checkstyle-checker.xml. So if you use a plugin for your IDE, use this file as your local configuration.

About

Credits

License

Copyright 2016 Patrick Favre-Bulle

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

Comments
  • GUI does not start on Mac

    GUI does not start on Mac

    UI crashes on start with exception:

    Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
        at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(LauncherImpl.java:182)
        at java.lang.Thread.run(Thread.java:745)
    Caused by: java.lang.NullPointerException
        at com.sun.javafx.font.MacFontFinder.populateFontFileNameMap(MacFontFinder.java:99)
        at com.sun.javafx.font.PrismFontFactory.getFullNameToFileMap(PrismFontFactory.java:1740)
        at com.sun.javafx.font.PrismFontFactory.getFontResource(PrismFontFactory.java:469)
        at com.sun.javafx.font.PrismFontFactory.createFont(PrismFontFactory.java:571)
        at com.sun.javafx.font.PrismFontLoader.font(PrismFontLoader.java:181)
        at javafx.scene.text.Font.font(Font.java:148)
        at javafx.scene.CssStyleHelper.deriveFont(CssStyleHelper.java:1643)
        at javafx.scene.CssStyleHelper.lookupFont(CssStyleHelper.java:1954)
        at javafx.scene.CssStyleHelper.lookup(CssStyleHelper.java:896)
        at javafx.scene.CssStyleHelper.transitionToState(CssStyleHelper.java:678)
        at javafx.scene.Node.impl_processCSS(Node.java:9189)
        at javafx.scene.Parent.impl_processCSS(Parent.java:1241)
        at javafx.scene.control.Control.impl_processCSS(Control.java:855)
        at javafx.scene.Parent.impl_processCSS(Parent.java:1272)
        at javafx.scene.Node.processCSS(Node.java:9056)
        at javafx.scene.Scene.doCSSPass(Scene.java:545)
        at javafx.scene.Scene.preferredSize(Scene.java:1643)
        at javafx.scene.Scene.impl_preferredSize(Scene.java:1720)
        at javafx.stage.Window$9.invalidated(Window.java:846)
        at javafx.beans.property.BooleanPropertyBase.markInvalid(BooleanPropertyBase.java:109)
        at javafx.beans.property.BooleanPropertyBase.set(BooleanPropertyBase.java:144)
        at javafx.stage.Window.setShowing(Window.java:922)
        at javafx.stage.Window.show(Window.java:937)
        at javafx.stage.Stage.show(Stage.java:259)
        at at.favre.tools.dconvert.ui.GUI.start(GUI.java:48)
        at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
        at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
        at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
        at java.security.AccessController.doPrivileged(Native Method)
        at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
        at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    
    opened by Spiderbezno 8
  • Problems while building with mvnw

    Problems while building with mvnw

    I would like to build the density-converter with: ./mvnw clean package. But i get some error with javafx. See attached file. Hope you can help me. mvnw_error.log

    opened by MaxiCode 2
  • Bump ant from 1.10.8 to 1.10.9

    Bump ant from 1.10.8 to 1.10.9

    Bumps ant from 1.10.8 to 1.10.9.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • Bump checkstyle from 8.18 to 8.29

    Bump checkstyle from 8.18 to 8.29

    Bumps checkstyle from 8.18 to 8.29.

    Release notes

    Sourced from checkstyle's releases.

    checkstyle-8.29

    https://checkstyle.org/releasenotes.html#Release_8.29

    checkstyle-8.28

    https://checkstyle.org/releasenotes.html#Release_8.28

    checkstyle-8.27

    https://checkstyle.org/releasenotes.html#Release_8.27

    checkstyle-8.26

    https://checkstyle.org/releasenotes.html#Release_8.26

    checkstyle-8.25

    https://checkstyle.org/releasenotes.html#Release_8.25

    checkstyle-8.24

    https://checkstyle.org/releasenotes.html#Release_8.24

    checkstyle-8.23

    https://checkstyle.org/releasenotes.html#Release_8.23

    checkstyle-8.22

    https://checkstyle.org/releasenotes.html#Release_8.22

    checkstyle-8.21

    https://checkstyle.org/releasenotes.html#Release_8.21

    checkstyle-8.20

    https://checkstyle.org/releasenotes.html#Release_8.20

    checkstyle-8.19

    https://checkstyle.org/releasenotes.html#Release_8.19

    Commits
    • 8933d03 [maven-release-plugin] prepare release checkstyle-8.29
    • bd45909 Issue #7487: refactor code to use DetailAST.hasChildren()
    • 317e51f Issue #7487: add method hasChildren() to DetailAST
    • 89b4dcd Issue #3238: Java 8 Grammar: annotations on arrays and varargs
    • 252cd89 dependency: bump junit-pioneer from 0.5.1 to 0.5.2
    • 2ee2615 dependency: bump junit.version from 5.5.2 to 5.6.0
    • 4ed7cb8 minor: add space before xml comment end '-->' to ease reading and make links ...
    • c46a16d Issue #7468: disable 'external-parameter-entities' feature by default
    • dfed794 minor: add missing test case to SuperCloneCheckTest
    • 24e7bdf dependency: bump antlr4.version from 4.7.2 to 4.8-1
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 1
  • Fixes iOS .imageset creation

    Fixes iOS .imageset creation

    .imageset now uses a Contents.json file with slightly different field names

    Old format: Content.json

    {
    	"images": [
    		{
    			"filename": "filename",
    			"idiom": "universal",
    			"scrScale": "1x"
    		}
    	],
    	"info": {
    		"author": "xcode",
    		"version": 1
    	}
    }
    

    New format: Contents.json

    {
    	"images": [
    		{
    			"filename": "filename",
    			"idiom": "universal",
    			"scale": "1x"
    		}
    	],
    	"info": {
    		"author": "xcode",
    		"version": 1
    	}
    }
    

    This made Xcode not recognize the images correctly.

    opened by pgrosslicht 1
  • Bump xmlgraphics-commons from 2.3 to 2.6

    Bump xmlgraphics-commons from 2.3 to 2.6

    Bumps xmlgraphics-commons from 2.3 to 2.6.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump ant from 1.10.8 to 1.10.11

    Bump ant from 1.10.8 to 1.10.11

    Bumps ant from 1.10.8 to 1.10.11.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump ant from 1.10.7 to 1.10.8

    Bump ant from 1.10.7 to 1.10.8

    Bumps ant from 1.10.7 to 1.10.8.

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • [SECURITY] Use HTTPS to resolve dependencies in Maven Build

    [SECURITY] Use HTTPS to resolve dependencies in Maven Build

    mitm_build


    This is a security fix for a vulnerability in your Apache Maven pom.xml file(s).

    The build files indicate that this project is resolving dependencies over HTTP instead of HTTPS. This leaves your build vulnerable to allowing a Man in the Middle (MITM) attackers to execute arbitrary code on your or your computer or CI/CD system.

    This vulnerability has a CVSS v3.0 Base Score of 8.1/10.

    POC code has existed since 2014 to maliciously compromise a JAR file in-flight. MITM attacks against HTTP are increasingly common, for example Comcast is known to have done it to their own users.

    This contribution is a part of a submission to the GitHub Security Lab Bug Bounty program.

    Detecting this and Future Vulnerabilities

    This vulnerability was automatically detected by LGTM.com using this CodeQL Query.

    As of September 2019 LGTM.com and Semmle are officially a part of GitHub.

    You can automatically detect future vulnerabilities like this by enabling the free (for open-source) LGTM App.

    I'm not an employee of GitHub nor of Semmle, I'm simply a user of LGTM.com and an open-source security researcher.

    Source

    Yes, this contribution was automatically generated, however, the code to generate this PR was lovingly hand crafted to bring this security fix to your repository.

    The source code that generated and submitted this PR can be found here: JLLeitschuh/bulk-security-pr-generator

    Opting-Out

    If you'd like to opt-out of future automated security vulnerability fixes like this, please consider adding a file called .github/GH-ROBOTS.txt to your repository with the line:

    User-agent: JLLeitschuh/bulk-security-pr-generator
    Disallow: *
    

    This bot will respect the ROBOTS.txt format for future contributions.

    Alternatively, if this project is no longer actively maintained, consider archiving the repository.

    CLA Requirements

    This section is only relevant if your project requires contributors to sign a Contributor License Agreement (CLA) for external contributions.

    It is unlikely that I'll be able to directly sign CLAs. However, all contributed commits are already automatically signed-off.

    The meaning of a signoff depends on the project, but it typically certifies that committer has the rights to submit this work under the same license and agrees to a Developer Certificate of Origin (see https://developercertificate.org/ for more information).

    - Git Commit Signoff documentation

    If signing your organization's CLA is a strict-requirement for merging this contribution, please feel free to close this PR.

    Tracking

    All PR's generated as part of this fix are tracked here: https://github.com/JLLeitschuh/bulk-security-pr-generator/issues/2

    opened by JLLeitschuh 0
  • Huge memory usage

    Huge memory usage

    I just noticed that the app is using 3.3 Gb RAM while doing nothing, just a form is shown. I know that java loves memory but I wonder if anything can be done to reduce RAM usage for such small app.

    opened by azatsh 0
  • Ignores orientation metadata

    Ignores orientation metadata

    I tried to compress some photos from my phone. Photos that were made in vertical position have a flag about that in metadata and for example Windows can automatically show those photos in correct way. But after compression with dconverter all photos become horizontal so the photos are not comfortable to watch.

    Expected: Photos maintain orientation metadata after compression.

    opened by azatsh 0
  • java.lang.RuntimeException: No toolkit found

    java.lang.RuntimeException: No toolkit found

    I have jdk 11 installed and tried running both exe and jar version of latest release but nothing started. When I run jar from cmd I could see an error: "java.lang.RuntimeException: No toolkit found" Which I assume happens because I don't have JavaFX installed. Would be great to mention that JavaFX is required addionally to jdk (in readme ?). Or show a message about that (UI popup form).

    opened by azatsh 1
  • Can not run on MAC OS

    Can not run on MAC OS

    I'm not able to run it on MAC OS and when I tried to run it via command line I got this exception

    Graphics Device initialization failed for :  es2, sw
    Error initializing QuantumRenderer: no suitable pipeline found
    java.lang.RuntimeException: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
    	at com.sun.javafx.tk.quantum.QuantumRenderer.getInstance(QuantumRenderer.java:280)
    	at com.sun.javafx.tk.quantum.QuantumToolkit.init(QuantumToolkit.java:222)
    	at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:260)
    	at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
    	at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
    	at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
    	at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
    	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
    	at java.base/java.lang.Thread.run(Thread.java:831)
    Caused by: java.lang.RuntimeException: Error initializing QuantumRenderer: no suitable pipeline found
    	at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.init(QuantumRenderer.java:94)
    	at com.sun.javafx.tk.quantum.QuantumRenderer$PipelineRunnable.run(QuantumRenderer.java:124)
    	... 1 more
    Exception in thread "main" java.lang.RuntimeException: No toolkit found
    	at com.sun.javafx.tk.Toolkit.getToolkit(Toolkit.java:272)
    	at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:267)
    	at com.sun.javafx.application.PlatformImpl.startup(PlatformImpl.java:158)
    	at com.sun.javafx.application.LauncherImpl.startToolkit(LauncherImpl.java:658)
    	at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:678)
    	at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
    	at java.base/java.lang.Thread.run(Thread.java:831)
    
    opened by ahmadmssm 0
  • Grayscale image is turned to RGB

    Grayscale image is turned to RGB

    Hi,

    I tried to use density-conveter on grayscale image and output images are in RGB. I mean now it bit depth is 24 bits compared to 8 bits in original image.

    How to retain the grayscale image bit depth ?

    Thanks.

    bug need more info 
    opened by kirantpatil 1
Releases(v1.0.0-alpha7)
Owner
Patrick Favre-Bulle
Computer Science MSc @ TUWien 2015. Going through the stack: JS Frontend, Android Mobile, Spring/Kotlin type backend. Interested in most topics cryptography
Patrick Favre-Bulle
Tool for create complex morphing animations using VectorDrawables (allows morphing between any pair of SVG images)

VectAlign VectAlign (a.k.a. VectorDrawableAlign) is a developer's tool which automagically aligns two VectorDrawable "pathData" strings (or SVG images

Stefano Bonetta 2k Dec 29, 2022
Command-line tool to count per-package methods in Android .dex files

dex-method-counts Simple tool to output per-package method counts in an Android DEX executable grouped by package, to aid in getting under the 65,536

Mihai Parparita 2.6k Nov 25, 2022
A command line tool that helps bulk manage resources in an Android project

Resource Mover ResourceMover is a command line tool that helps bulk manage resources in an Android project. Installation Clone project Build CLI jar u

Shopify 4 Dec 24, 2021
A library which will save you a lot of time from writing the same intent creation code. it consist of many intent creation codes like Share, Contacts, Email and etc, which you can easily use.

Android-Intent-Library A library which will save you a lot of time from writing the same intent creation code. it consist of many intent creation code

Next 67 Aug 24, 2022
Android Resource Manager application to manage and analysis your app resources with many features like image resize, Color, Dimens and code Analysis

Android Resource Manager application to manage and analysis your app resources with many features like image resize, Color, Dimens and code Analysis

Amr Hesham 26 Nov 16, 2022
SVG to Android VectorDrawable XML resource file

svg2android [Deprecated - use official Vector Asset Studio directly from Android Studio] Convert SVG to Android VectorDrawable XML resource file. Extr

INLOOPX 1.7k Dec 29, 2022
Use a jar executable to create a Drawable class to display a SVG on Android.

SVG2Drawable Use a jar executable to create a Drawable class to display a SVG on Android. This is a standalone library, not a Runtime Android library.

Stan Kocken 202 Nov 28, 2022
Android Layout (Relative Layout, Linear Layout etc) to Image

Layout-to-Image Android Layout Xml File Containing any Parent Layout (Relative Layout, Linear Layout etc) to Image Screenshot of Sample Application Qu

Vipul Asri 166 Nov 22, 2022
Enhance the adb shell using busybox, supporting vi、grep and awk etc. No need root.

super-adb 用busybox加持的功能更加强大的adb shell;不需要root。 使用方法 准备工作 安装 python,注意选择安装python 2.x 安装pexpect这个python库: pip install pexpect 下载super_adb,把它放到系统路径 cp su

weishu 273 Dec 7, 2022
It makes a preview from an url, grabbing all the information such as title, relevant texts and images. This a version for Android of my web link preview https://github.com/LeonardoCardoso/Link-Preview

LeoCardz Link Preview for Android It makes a preview from an url, grabbing all the information such as title, relevant texts and images. Visual Exampl

Leonardo Cardoso 420 Nov 19, 2022
A tool to install components of the Android SDK into a Maven repository or repository manager to use with the Android Maven Plugin, Gradle and other tools.

Maven Android SDK Deployer Original author including numerous fixes and changes: Manfred Moser [email protected] at simpligility technologies i

simpligility 1.4k Dec 27, 2022
A tool to install components of the Android SDK into a Maven repository or repository manager to use with the Android Maven Plugin, Gradle and other tools.

Maven Android SDK Deployer Original author including numerous fixes and changes: Manfred Moser [email protected] at simpligility technologies i

simpligility 1.4k Dec 27, 2022
A simple utility to remove unused resources in your Android app to lower the size of the APK. It's based on the Android lint tool output.

android-resource-remover android-resource-remover is utility that removes unused resources reported by Android Lint from your project. The goal is to

Keepsafe 1.3k Dec 16, 2022
Android Material Design Theme UI and Tool Library. Support: 4.0.3~O

GitHub OSChina 中文 English Genius-Android Genius-Android: by Material Design style and some commonly used packages. Starting in 2015, The divided into

Qiujuer 2.3k Dec 27, 2022
A super fast build tool for Android, an alternative to Instant Run

Freeline Freeline is a super fast build tool for Android and an alternative to Instant Run. Caching reusable class files and resource indices, it enab

Alibaba 5.5k Jan 2, 2023
Android Merge Tool

AMT The Android Merge Tool (AMT) does what the name suggests: it merges arbitrary Android apps into a single merged app. As input it takes a number of

FoelliX 23 Nov 8, 2022
Android Studio's Vector Drawable conversion tool in convenient packaging.

Vector Drawable Tool This repository is simply a repackaging of the vector drawable tool from the Android Studio source code. The included Gradle file

Ryan Harter 55 Sep 26, 2022
Localization tool for Android Studio Projects

Android Strings Resource Language Diff tool In the event any additional languages are intended to be supported by your app. You can use this strings-d

Braxton Nunnally 1 Mar 24, 2022