View Source Changelog

image-0-33-0

Image 0.33.0

This is the changelog for Image version 0.32.1 released on June 2nd, 2023. For older changelogs please consult the release tag on GitHub

breaking-changes

Breaking Changes

  • Image.dhash/1 now returns a 64-bit hash rather than a 512-bit hash. The original algorithm is intended to return a 64-bit hash so this is both a breaking change and bug fix.

  • Fix generation of images from text when autofit: false (the default). In these cases the text image is generated from SVG. The original implementation operated on the basis that the image would be generated with a height and width necessary to contain the text of a given font size. The result is not consistent and is influenced by whether the text has ascenders or desenders. The new implementation creates an SVG container of a size large enough to contain the text at the given font-size and then trims away the background to produce the final result. Thanks to @ilesar for the report. Closes #86. As a result of this fix, existing text-generated images may not now be the same as previous releases.

image-0-32-0

Image 0.32.0

This is the changelog for Image version 0.32.0 released on May 24th, 2023. For older changelogs please consult the release tag on GitHub

bug-fixes

Bug Fixes

  • Fix Image.Text.text/2 when the text fill color is black (within a tolerance). When the text image is created, Vix.Vips.Operation.find_trim/2 is called to trim the image assuming a black background. Since the fill color is also black, the resulting trim is 0 pixels wide and 0 pixels high. When then cropping the image, the crop fails because the crop size is invalid. The fix is to not crop if there is no trim detected. Thanks to @tielur for the report. Closes #84.

  • Fix specification for Image.compose/3 to remove dialyzer error (and include test case). Thanks to @tielur for the report. Closes #85.

  • Fix Image.add_alpha/2 when providing a "color". In fact the value should be an integer in the range 0..255 representing the level of transparency of the alpha band. The function spec, documentation and implementation are now changed to accept only an integer (or the atoms :opaque and :transparent).

enhancements

Enhancements

image-0-31-1

Image 0.31.1

This is the changelog for Image version 0.31.1 released on May 10th, 2023. For older changelogs please consult the release tag on GitHub

bug-fixes-1

Bug Fixes

image-0-31-0

Image 0.31.0

This is the changelog for Image version 0.31.0 released on May 7th, 2023. For older changelogs please consult the release tag on GitHub

bug-fixes-2

Bug Fixes

  • Fix resolution of the image returned from Image.replace_color/2. Thanks to @tielur for the report. Closes #78.

enhancements-1

Enhancements

  • Add :blend option to Image.if_then_else/4. When set to true with smoothly blend between the then and else images. The default is false.

image-0-30-0

Image 0.30.0

This is the changelog for Image version 0.30.0 released on April 20th, 2023. For older changelogs please consult the release tag on GitHub

bug-fixes-3

Bug Fixes

enhancements-2

Enhancements

image-0-29-0

Image 0.29.0

This is the changelog for Image version 0.29.0 released on April 14th, 2023. For older changelogs please consult the release tag on GitHub

enhancements-3

Enhancements

image-0-28-2

Image 0.28.2

This is the changelog for Image version 0.28.2 released on April 13th, 2023. For older changelogs please consult the release tag on GitHub

bug-fixes-4

Bug Fixes

  • Image.Classification.serving/2 was applying the option top_k: 1 which means not all predictions were being returned. This option is now removed. Thanks to @tmariaz for raising the issue.

image-0-28-1

Image 0.28.1

This is the changelog for Image version 0.28.1 released on April 7th, 2023. For older changelogs please consult the release tag on GitHub

bug-fixes-5

Bug Fixes

image-0-28-0

Image 0.28.0

This is the changelog for Image version 0.28.0 released on April 6th, 2023. For older changelogs please consult the release tag on GitHub

bug-fixes-6

Bug Fixes

  • Fixes resizing images with alpha bands. Resizing images with alpha bands requires premultiplying the alpha band into the image and reversing that after resizing.

enhancements-4

Enhancements

image-0-27-1

Image 0.27.1

This is the changelog for Image version 0.27.1 released on March 20th, 2023. For older changelogs please consult the release tag on GitHub

behaviour-change

Behaviour Change

  • Changes the default position for an image embedded via Image.embed/2 to be [0, 0] not [:center, :center].

image-0-27-0

Image 0.27.0

This is the changelog for Image version 0.27.0 released on March 20th, 2023. For older changelogs please consult the release tag on GitHub

image-packaging-future

Image packaging future

In a future release, Image will be split into several packages

  • :image which will retain all the core components of image transformation based upon vix and libvips.
  • :image_nx which will provide :nx interoperability (and will depend on :image)
  • :image_exif which will provide metadata support (and will depend on :image)
  • :image_classification which will provide image classification (and will depend on :image and :bumblebee)
  • :image_generation which will provide image generation (and will depend on :image and :bumblebee)
  • :image_detection which will provide object detection (and will depend on :image, :axon, :axon_onnx)
  • :image_qrcode which will provide QRcode scanning and production (and will depend on:image and :evision)
  • :image_video which will provide video frame extraction (and will depend on:image and :evision)

enhancements-5

Enhancements

image-0-26-0

Image 0.26.0

This is the changelog for Image version 0.26.0 released on March 12th, 2023. For older changelogs please consult the release tag on GitHub

breaking-change

Breaking change

  • Image.avatar/3 is now Image.avatar/2. The size parameter is now the :size option. The default value of 180 pixels remains.

enhancements-6

Enhancements

  • Image.avatar/2 takes a :shape option that is either :circle (the default) or :square. This allows the generation of either circular or square avatars.

bug-fixes-7

Bug Fixes

  • Fix Image.open/2 for SVG binaries and add note to show that SVG images can be opened.

  • Fix Image.avatar/2 to square the image after thumbnailing but before applying any mask. This ensures a circular mask is centred on the thumbnailed image.

  • Fix Image.avatar/2 for image path parameters which no correctly flattens the image.

  • Fix Image.avatar!/2 to accept either an image or an image path.

image-0-25-1

Image 0.25.1

This is the changelog for Image version 0.25.1 released on March 1st, 2023. For older changelogs please consult the release tag on GitHub

bug-fixes-8

Bug Fixes

  • Fix is_webp/1 guard and downcase all suffixes before validation. Thanks to @quentin-bettoum for the report and fix. Closes #64.

  • Fix Image.avatar/3 to flatten the source image before compositing with the mask. Thanks to @jarrodmoldrich for the report. Closes #63.

  • Fix Image.flatten/1 to only flatten if there is an alpha band.

image-0-25-0

Image 0.25.0

This is the changelog for Image version 0.25.0 released on February March 1st, 2023. For older changelogs please consult the release tag on GitHub

behavior-change

Behavior Change

  • The default access mode for Image.open/2 is now access: :random in line with libvips native default. Although access: :sequential optimizes for many cases (especially with regard to memory) it resulted in poor developer experience since the error messages when trying to re-use a access: :sequential image are difficult to understand and very difficult to re-interpret in image.

bug-fixes-9

Bug Fixes

  • Adds :heic and :avif suffixes to the list of valid suffixes for heif file formats. Thanks to @quentin-bettoum for the PR. Closes #50.

  • Allows specifying the option padding: 0 for Image.Text.text/2. Previously this only supported positive integers.

  • Fix Image.write/3 documentation. Thanks to @jeregrine for the PR. Closes #62.

enhancements-7

Enhancements

  • Update README.md to include updated documentation for installing libvips with Vix.

  • Adds :x and :y options to Image.Text.text/2 which allows placing the text on its background in the specified location. :x can be specified as a non-negative integer or one of :left, :right or :center with the default being :center. :y can be specified as a non-negative integer or one of :top, :bottom or :middle with the default being :middle. Thanks to @severian1778 for the issue and collaboration. Closes #44.

  • Adds an option :effort to Image.write/3 for :png, :heif, :heic, :avif and :webp images that determines the amount of CPU effort permitted when compressing the image data. Thanks to @quentin-bettoum for the PR. Closes #45.

image-0-24-1

Image 0.24.1

This is the changelog for Image version 0.24.1 released on February 14th, 2023. For older changelogs please consult the release tag on GitHub

bug-fixes-10

Bug Fixes

  • Fixes :weight option handling in Image.meme/3 to include :ultralight. Thanks to @quentin-bettoum. Closes #42.

  • Fixes :intent option handling in Image.thumbnail/3. Thanks to @quentin-bettoum. Closes #43.

image-0-24-0

Image 0.24.0

This is the changelog for Image version 0.24.0 released on February 6th, 2023. For older changelogs please consult the release tag on GitHub

enhancements-8

Enhancements

image-0-23-2

Image 0.23.2

This is the changelog for Image version 0.23.2 released on January 31st, 2023. For older changelogs please consult the release tag on GitHub

bug-fixes-11

Bug Fixes

image-0-23-1

Image 0.23.1

This is the changelog for Image version 0.23.1 released on January 30th, 2023. For older changelogs please consult the release tag on GitHub

bug-fixes-12

Bug Fixes

  • Kino.show/2 returns the image instead of :ok so that it works correctly in a grid. Thanks to @RyoWakabayashi for the suggestion.

image-0-23-0

Image 0.23.0

This is the changelog for Image version 0.23.0 released on January 29th, 2023. For older changelogs please consult the release tag on GitHub

bug-fixes-13

Bug Fixes

enhancements-9

Enhancements

  • Adds Image.normalize/1 which normalizes an image by expanding the luminance of an image to cover the full dynamic range.

  • Adds Image.autolevel/1 which scales each band of an image to fit the full dynamic range. Unlike Image.normalize/1, each band is scaled separately.

  • Adds Image.erode/2 which erodes pixels from the edge of an image mask. This can be useful to remove a small amount of colour fringing around the edge of an image.

  • Adds Image.dilate/2 which dilates pixels from the edge of an image mask.

  • Adds Image.trim/2 which trims an image to the bounding box of the non-background area.

  • Adds Image.flatten/1 which flattens an alpha layer out of an image

  • Image.Options.Write.validate_options/2 now validates options appropriate to each image type in order to make validation more robust.

  • Adds :minimize_file_size option to Image.write/2 for JPEG and PNG files which if true will apply a range of techniques to minimize the size of the image file at the expense of time to save the image and potentially image quality.

image-0-22-1

Image 0.22.1

This is the changelog for Image version 0.22.1 released on January 9th, 2023. For older changelogs please consult the release tag on GitHub

bug-fixes-14

Bug Fixes

image-0-22-0

Image 0.22.0

This is the changelog for Image version 0.22.0 released on January 9th, 2023. For older changelogs please consult the release tag on GitHub

enhancements-10

Enhancements

image-0-21-0

Image 0.21.0

This is the changelog for Image version 0.21.0 released on January 8th, 2023. For older changelogs please consult the release tag on GitHub

breaking-change-1

Breaking change

enhancements-11

Enhancements

  • Adds Image.Video.image_from_video/2 with support for :frame and :millisecond seek options. Seek options are only supported for video files, not video streams.

  • Adds Image.Video.seek/2 to seek the extraction point to the requested frame or millisecond. Seeking is supported for video files only, not video streams.

  • Adds support for capturing images from video streams (not only video files). For example, Image.Video.open(:default_camera). See the updated documentation for Image.Video.open/1. An image stream does not support seeking.

image-0-20-0

Image 0.20.0

This is the changelog for Image version 0.20.0 released on January 8th, 2023. For older changelogs please consult the release tag on GitHub

bug-fixes-15

Bug Fixes

enhancements-12

Enhancements

  • Add support for extracting frames from video as images using eVision. See Image.Video.

  • Supports vix upcoming prebuilt libvips. The prebuilt libvips may not include the FFT dependency so Image.skew_angle/1 and Image.fft/1 are only included if Vix.Vips.Operation.fft!/1 is available.

image-0-19-0

Image 0.19.0

This is the changelog for Image version 0.19.0 released on December 24th, 2022. For older changelogs please consult the release tag on GitHub

enhancements-13

Enhancements

image-0-18-1

Image 0.18.1

This is the changelog for Image version 0.18.1 released on December 21st, 2022. For older changelogs please consult the release tag on GitHub

bug-fixes-16

Bug Fixes

  • Fix Image.Application.start/2. Previously it would return nil if Bumblebee was not configured and nil is not a valid return from an application start function. Thanks to @haste for the report and PR. Closes #34.

image-0-18-0

Image 0.18.0

This is the changelog for Image version 0.18.0 released on December 20th, 2022. For older changelogs please consult the release tag on GitHub

enhancements-14

Enhancements

image-0-17-0

Image 0.17.0

This is the changelog for Image version 0.17.0 released on December 19, 2022. For older changelogs please consult the release tag on GitHub

breaking-change-2

Breaking change

  • Rename Image.orientation/1 to be Image.aspect/1 to better reflect its purpose. Orientation has a more specific meaning in image metadata and in Vips.Vix.Image.orientation/1.

bug-fixes-17

Bug Fixes

  • Fix Image.aspect/1 for exactly square images.

  • Draw functions now default to opaque if the base image has an alpha band (previously they would be transparent). Thanks for @kwando for the collaboration. Closes #32.

enhancements-15

Enhancements

image-0-16-0

Image 0.16.0

This is the changelog for Image version 0.16.0 released on Decmber 18th, 2022. For older changelogs please consult the release tag on GitHub

enhancements-16

Enhancements

  • Allow percentages to be specified as Image.crop/5 parameters for left, top, width and height. Percentages are expressed as floats in the range -1.0 to 1.0 (for left and top) and greater than 0.0 and less than or equal to 1.0 (for width and height). Thanks to @tmjoen for the suggestion.

image-0-15-1

Image 0.15.1

This is the changelog for Image version 0.15.1 released on Decmber 13th, 2022. For older changelogs please consult the release tag on GitHub

bug-fixes-18

Bug Fixes

  • Fixes interpretation of color encoded as #xxxxxx. Closes #26. Thanks to @a8t for the report.

image-0-15-0

Image 0.15.0

This is the changelog for Image version 0.15.0 released on Decmber 4th, 2022. For older changelogs please consult the release tag on GitHub

bug-fixes-19

Bug Fixes

enhancements-17

Enhancements

  • Add :autofit option to Image.Text.text/2. When set to true, text is rendered with Vix.Vips.Operation.text/2. The default, false, uses SVG rendering. There are pros and cons to both strategies. The main difference is that autofit: true will automatically size the text and perform line wrapping to fit the specified :width and :height. Thanks to @dmitriid for the suggestion!

image-0-14-4

Image 0.14.4

This is the changelog for Image version 0.14.4 released on November 14th, 2022. For older changelogs please consult the release tag on GitHub

bug-fixes-20

Bug Fixes

  • Fix the return type for Image.write/3 for Plug.Conn. Thanks to @andreyuhai for the PR.

  • Fix type specs for Image.write/3 when the destination is :memory. Thanks to @georgfaust for raising the issue.

  • Fixes the rbga color model for integer alpha values again (which are automatically cast to the appropriate float value). Thanks to @andreyuhai for your patience and collaboration while this was sorted out.

image-0-14-3

Image 0.14.3

This is the changelog for Image version 0.14.3 released on November 14th, 2022. For older changelogs please consult the release tag on GitHub

bug-fixes-21

Bug Fixes

  • Fixes the rbga color model for integer alpha values (which are automatically cast to the appropriate float value). Thanks to @andreyuhai for your patience and collaboration while this was sorted out.

  • Casts the color to the correct number of bands in Image.Draw functions. This will either add or remove an alpha band to the color of the shape being drawn to match the underlying image. Thanks to @andreyuhai for the PR. Closes #22.

image-0-14-2

Image 0.14.2

This is the changelog for Image version 0.14.2 released on November 13th, 2022. For older changelogs please consult the release tag on GitHub

bug-fixes-22

Bug Fixes

image-0-14-1

Image 0.14.1

This is the changelog for Image version 0.14.1 released on November 11th, 2022. For older changelogs please consult the release tag on GitHub

bug-fixes-23

Bug Fixes

  • Fix streaming image writes. Previously the stream chunks were being written in reverse order. Closes #19. Thanks to @loics2 for the report.

image-0-14-0

Image 0.14.0

This is the changelog for Image version 0.14.0 released on November 11th, 2022. For older changelogs please consult the release tag on GitHub

bug-fixes-24

Bug Fixes

  • Fixes extracting exif data when there is an exif blob but no exif tags. Closes #21. Thanks to @feld for the report.

enhancements-18

Enhancements

image-0-13-1

Image 0.13.1

This is the changelog for Image version 0.13.1 released on October 23rd, 2022. For older changelogs please consult the release tag on GitHub

bug-fixes-25

Bug fixes

  • Since a font named Impact isn't available on all systems, default meme generator can produce unexpected results for the rendered text. The Impact font is now included in Image and will be used if the font name is Impact.

image-0-13-0

Image 0.13.0

This is the changelog for Image version 0.13.0 released on October 23rd, 2022. For older changelogs please consult the release tag on GitHub

breaking-change-3

Breaking change

bug-fixes-26

Bug fixes

  • Fix Image.open/2 when opening JPEG images from a binary. Seems JPEG files agree on the <<0xff, 0xd8, 0xff>> header for the first three bytes. But not completely consistent with the following bytes.

  • Fix options for Image.Draw functions which are expected to be a map after validation (but were a keyword list).

enhancements-19

Enhancements

image-0-12-0

Image 0.12.0

This is the changelog for Image version 0.12.0 released on October 14th, 2022. For older changelogs please consult the release tag on GitHub

enhancements-20

Enhancements

image-0-11-0

Image 0.11.0

This is the changelog for Image version 0.11.0 released on October 8th, 2022. For older changelogs please consult the release tag on GitHub

enhancements-21

Enhancements

  • Now uses eVision version 0.1 or later from hex.pm

image-0-10-0

Image 0.10.0

This is the changelog for Image version 0.10.0 released on October 5th, 2022. For older changelogs please consult the release tag on GitHub

bug-fixes-27

Bug Fixes

  • Since the mix build process does a File.cwd!/1 to the directory of each dependency we can't use the dirname of the dependency to decide whether to configure :evision or not. The strategy is now changed to configure :evision only if the environment CONFIGURE_EVISION is set. Note this is only relevant when developing :image itself. Consumers of the library should add :evision as a dependency manually in their application mix.exs as described in the readme. Thanks to @martosaur for the report. Closes #13.

image-0-9-0

Image 0.9.0

This is the changelog for Image version 0.9.0 released on October 1st, 2022. For older changelogs please consult the release tag on GitHub

enhancements-22

Enhancements

  • Image.open/2 supports opening .gif and .tif images from raw binary data in addition to the previous .jpeg, .png and .webp.

  • Add Image.shape/1

  • Add Image.interpretation/1

  • Add Image.type/1

  • Add initial support for eVision. In this release the function Image.QRcode.decode/1 is provided to decode images that contain a QRcode. See the eVision repository for installation instructions since this library is not yet on hex.pm.

  • Removed most dialyzer warnings. The remaining warnings require an update to Vix (a PR has been submitted).

image-0-8-0

Image 0.8.0

This is the changelog for Image version 0.8.0 released on September 30, 2022. For older changelogs please consult the release tag on GitHub

enhancements-23

Enhancements

  • Image.open/2 now accepts raw image data for the image types .jpeg, .png, .webp

image-0-7-0

Image 0.7.0

This is the changelog for Image version 0.7.0 released on September 30, 2022. For older changelogs please consult the release tag on GitHub

enhancements-24

Enhancements

  • Set the environment variable VIPS_BLOCK_UNTRUSTED at application start if it is not already set. As of libvips 8.13 this environment variable will cause libvips to not use any image loaders that are "unfuzzed".

  • Add mutable draw operations. These operations mutate an image directly and hence special care is taken to avoid race conditions. All mutuable operations are serialized via a GenServer. See the Image.Draw module. These functions are experimental for now pending additional testing.

  • Add Image.from_binary/2 to support creating an image from a raw binary.

  • Thanks to @timothyvanderaerden for the PR to support getting dialyzer under control. Work will continue on this over the next several releases.

image-0-6-0

Image 0.6.0

This is the changelog for Image version 0.6.0 released on July 19th, 2022. For older changelogs please consult the release tag on GitHub

bug-fixes-28

Bug fixes

  • Don't attempt to compile code that refers to Plug.t if Plug is not configured. Thanks to @kwando. Closes #7.

enhancements-25

Enhancements

  • Adds Image.dshash/1 to return a 512-bit image hash.

  • Adds Image.hamming_distance/2 to compare the similarity of two images or two image hashes.

  • Adds Image.radial_gradient/3 to great a radial gradient image. This could be used to composite over another image to add a vignette.

  • Adds Image.Math logical functions boolean_and/2, boolean_or/2, boolean_xor/2, boolean_lshift/2 and boolean_rshift/2. Also includes the ! versions.

  • Add operator use Image.Math overloads for image &&& (and), ||| (or), <<< (lshift) and >>> (rshift).

image-0-5-0

Image 0.5.0

This is the changelog for Image version 0.5.0 released on June 24th, 2022. For older changelogs please consult the release tag on GitHub

enhancements-26

Enhancements

image-0-4-0

Image 0.4.0

This is the changelog for Image version 0.4.0 released on June 23rd, 2022. For older changelogs please consult the release tag on GitHub

enhancements-27

Enhancements

  • Adds support for opening streaming images. This allows images to be streamed from File.stream!/3 or from any t:Stream.t/0 including those created from ExAws.S3 by ExAws.stream!/2.

  • Adds support writing streaming images. This allows images to be streamed as an enumerable which can then be consumed by Plug.Conn.chunk/2, by ExAws.S3.upload/3, File.stream/3 or any other function that processes stream resources. See the test/stream_image_test.exs for examples.

  • Adds a :memory option to Image.write/3. Instead of a path name or stream, use :memory if you'd like to return a binary form of an image in its formatted type. Note that this will run the image transformation pipeline resulting in the entire final image being loaded into memory. Therefore this option should be used sparingly since most use cases do not require this option. It is primarily added to facilitate passing images to other libraries in the Elixir ecosystem.

image-0-3-0

Image 0.3.0

This is the changelog for Image version 0.3.0 released on June 4th, 2022. For older changelogs please consult the release tag on GitHub

enhancements-28

Enhancements

  • Add Image.dominant_color/2 to return the dominant color of an image

  • Add Image.histogram/1 to return a histogram of an image

  • Add Image.get_pixel to get the pixel value at a given x and y offset into an image.

image-0-2-0

Image 0.2.0

This is the changelog for Image version 0.2.0 released on May 18th, 2022. For older changelogs please consult the release tag on GitHub

enhancements-29

Enhancements

image-0-1-0

Image 0.1.0

This is the changelog for Image version 0.1.0 released on May 4th, 2022. For older changelogs please consult the release tag on GitHub

enhancements-30

Enhancements

  • Initial release