Dynamic image server for web and print

Overview

Quru Image Server - dynamic imaging for web and print

QIS is a high performance web server for creating and delivering dynamic images. It is ideal for use in conjunction with your existing web site, for applications such as image galleries and product catalogues. Some of the application features are listed below, but for more information you can also read the application introduction and overview.

Quru has been using QIS in production since 2012, and the source code of the Standard Edition is made available here under the Affero GPL license.

Quru also offers a Premium Edition of QIS. This consists of a more fully featured image processing engine, plus the option of obtaining professional services and commercial support, for a modestly priced annual subscription.

Try it now on your own server, on Docker, or on Amazon Web Services

An example - HTML5 responsive images

With QIS it is a breeze to serve HTML5 responsive images without having to manually resize or store multiple copies of the same image.

First we upload a single high resolution image africa_dxm.png.
With different URLs we can then request scaled and cropped versions of the original:

Earth small Earth smaller Earth tiny crop

and with a snippet of HTML we can ask the web browser to download whichever one of these is most appropriate for the screen size for the device (desktop, tablet, or phone):

<div style="width:33%">
<img src="https://images.quru.com/image?src=nasa/africa_dxm.png&format=jpg&width=500"
     alt="NASA picture of planet Earth"
     srcset="https://images.quru.com/image?src=nasa/africa_dxm.png&format=jpg&width=300 300w,
             https://images.quru.com/image?src=nasa/africa_dxm.png&format=jpg&width=200 200w,
             https://images.quru.com/image?src=nasa/africa_dxm.png&format=jpg&width=100&left=0.15&top=0.15&right=0.7&bottom=0.7 100w"
     sizes="33vw" />
</div>

You might notice we have also converted the image from png to jpg format, to achieve smaller file sizes. These scaled images are automatically created on-demand, and are then stored in a memory cache so that they are instantly available next time around. The original image file is stored in a directory on the server and is never modified.

Features

Dynamic image operations include:

  • Resize, rotate, flip, crop, and tiling
  • Conversion to different image formats
  • Stripping of image metadata to minimise image file sizes
  • Blur and sharpen (Premium Edition)
  • Overlays / watermarks (Premium Edition)
  • Colorspace conversion (Premium Edition)
  • ICC / ICM colour profiles for print publishing (Premium Edition)
  • PDF conversion to and from images (Premium Edition)

See the imaging user's guide for a full list, or try the online demo.

Image presentation features include:

  • Bookmarkable image URLs
  • Image thumbnail generation
  • HTML/JavaScript libraries
    • Dependency-free with support for Internet Explorer 9 and newer
    • Animated image zooming for HTML5-compliant web browsers and tablets
    • Full-screen image viewing
    • Image carousel / slideshow
    • Image gallery / folder viewer
    • Lazily-loaded images
  • Image publishing wizard with dynamic preview
  • Access control via user-groups and folders

Programmatic features include:

  • Image generation templates (a named group of image operations)
  • Create image collections that can be viewed together or downloaded as a zip file
  • A REST API that allows you to securely upload images, generate dynamic images, and perform management and administration

See the API user's guide for more detail.

Management features in the web interface include:

  • File system and image browser
    • Add, rename, move, and delete image files and folders
  • User and group administration
  • Folder-based access control, user permissions administration
  • System reports
    • Most popular images (by number of requests, bandwidth, processing time)
    • Server performance charts

Screenshots

JavaScript library - image gallery (incorporating zooming viewer)
Embeddable gallery component

Web interface - folder browse - list view
Folder browse

Web interface - folder browse - thumbnail view
Folder browse

Web interface - image details
Image details view

Web interface - image publishing
Image publisher

Installation and running

See the installation and running guide for how to run QIS on your own server, on Docker, or on Amazon Web Services.

Development

If you are a developer wanting to make code changes to the application, see the development guide for how to set up the project and run the application in development mode.

Important recent changes

QIS v3 is a port of QIS v2.7 to run on Python 3 only. It contains a few tidy-ups, slightly better performance thanks to improvements in Python 3, but otherwise adds no major new features.

QIS v4 is the first release to be fully open source. It adds an image processing module built on the Pillow library and becomes the new QIS Standard Edition. An optional more fully featured image processing module, built on the ImageMagick package, is available from Quru and becomes QIS Premium Edition.

Standard and Premium editions

The fully open source Standard Edition uses the Python-Pillow imaging library, which is well suited to basic image resizing and cropping, and offers good performance when colour accuracy is not critical (see the IMAGE_RESIZE_GAMMA_CORRECT setting) and when only support for the most common file types is required.

The optional upgrade to the Premium Edition swaps Pillow for a proprietary interface to the ImageMagick, Ghostscript and LibRaw packages, bringing these advantages:

  • Support for image conversion to and from PDF files
  • Support for reading various digital camera RAW file formats
  • Support for applying ICC / ICM colour profiles
  • Support for additional file types, such as PSD and SVG**
  • 16 bits per pixel colour processing (instead of 8)**, giving more accurate colour conversions and avoiding clipping
  • Better retention of file metadata, such as EXIF and TIFF tags
  • Gamma corrected resizing with a minimal performance difference
  • Eligibility for professional services and commercial support from Quru

** Depending on the installed version of ImageMagick, but typically enabled by default

Roadmap

Topics under consideration for future versions, in no particular order:

  • Image portfolios user interface
    • Addition of "add to basket" while image browsing in the admin interface
    • Addition of portfolios administration to the admin interface
    • Portfolio publishing (to zip) from the admin interface
    • Viewing a portfolio from the gallery and slideshow viewers
  • Optional long image URL to tiny URL conversion
    • New checkbox in the image publisher
    • Add to REST API
    • Tiny URL admin pages in the web interface
  • Prevent certain image attributes (width, height, overlay) from being overridden
  • Image search and search results
  • Image tags
    • System-defined e.g. assignment of an image category
    • User-defined
    • Tagging a zone or location on an image
    • Searching by tag
  • Modernise the public JavaScript APIs / viewers
    • Use HTML5 data- attributes for automatic initialisation
    • Reduce the number of included files
  • The ability to use an object store (e.g. Amazon S3) for back-end image storage
  • New imaging operations
    • Automatic crop to target dimensions
    • Generate image frames from video files (like Gifify)
    • Enhanced EXIF / XMP support e.g. to set copyright text
    • Automatic file size optimisation (like PNG Crush)
  • Support for new image formats
    • BPG, JPEG XR, WEBP
    • HDRI, wide colour / Display P3 color spaces
  • Cloud storage integration (Dropbox, Google Drive, ...)
  • Social media integration (Instagram, Flickr, Pinterest, ...)
  • Improve the image generation architecture for more consistent performance under load
  • Replace Memcached with Redis and ditch the qis-cache database
  • Deployment on Nginx Unit instead of Apache + mod_wsgi
Comments
  • How to configure the image max file size?

    How to configure the image max file size?

    Hi, when uploading larger images we get an error looking like this.

    image

    • Firstly it is a terrible UX as the actually error message is missing, so it is not clear what went wrong.
    • Secondly, how can I configure the max file size for uploading images?
    opened by martnst 15
  • No module named 'encodings'

    No module named 'encodings'

    I am following the installation guide and have a problem with httpd starting python program. OS is Centos 7, locale is en_US.UTF-8

    Here is what I found in httpd error log:

    Current thread 0x00007fb1adcf6880 (most recent call first):
    [Tue Oct 22 18:01:32.200714 2019] [core:notice] [pid 1951] AH00052: child pid 2170 exit signal Aborted (6)
    [Tue Oct 22 18:01:32.201642 2019] [core:notice] [pid 1951] AH00052: child pid 2171 exit signal Aborted (6)
    Fatal Python error: Py_Initialize: Unable to get the locale encoding
    Fatal Python error: Py_Initialize: Unable to get the locale encoding
    ImportErrorImportError: : No module named 'encodings'No module named 'encodings'
    

    I found suggestions to fix python path variables, but I don't have them and manually invoking python commands with UTF-8 encodings works well. Also I tried to install latest python3 from centos repository and compile mod_wsgi from pip, but got the same error.

    opened by kanlas-net 10
  • Error running docker setup on Ubuntu

    Error running docker setup on Ubuntu

    Looks like there is a missing configuration in the docker image?

    Logs:

    $ docker ps | grep as
    59de577458a1        quru/qis-as          "/run-qis.sh"         3 hours ago         Up 3 hours (unhealthy)   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp   qis-via-docker_qis_as_1
    
    $ docker logs 59de577458a1
    Performing one-time initialization
    Waiting 30 seconds for the Postgres database to be created
    AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 172.***.***.3. Set the 'ServerName' directive globally to suppress this message
    
    $ docker -v
    Docker version 19.03.2, build 6a30dfc
    
    $ curl --insecure -i https://localhost
    HTTP/1.1 500 Internal Server Error
    Date: Wed, 02 Oct 2019 11:50:37 GMT
    Server: Apache/2.4.18 (Ubuntu)
    Content-Length: 607
    Connection: close
    Content-Type: text/html; charset=iso-8859-1
    
    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <html><head>
    <title>500 Internal Server Error</title>
    </head><body>
    <h1>Internal Server Error</h1>
    <p>The server encountered an internal error or
    misconfiguration and was unable to complete
    your request.</p>
    <p>Please contact the server administrator at 
     [no address given] to inform them of the time this error occurred,
     and the actions you performed just before this error.</p>
    <p>More information about this error may be available
    in the server error log.</p>
    <hr>
    <address>Apache/2.4.18 (Ubuntu) Server at localhost Port 443</address>
    </body></html>
    
    opened by martnst 6
  • HTTP error 500s sometimes returned after an Apache graceful restart

    HTTP error 500s sometimes returned after an Apache graceful restart

    I'm copying this issue here from Quru's internal bug tracker as it documents some interesting behaviour.

    Seen in live today when it ruined a PDF report: qis_access_log: 109.111.129.21 [08/Dec/2017:03:50:46 +0000] "GET /image?src=Images/live/2016-06/17/9226877-587-1.jpg.tif&top=0&left=0&right=1&bottom=1&fill=&angle=0&tmp=ConditionReport HTTP/1.1" 500 620 - 132606 - "Prince/10 (www.princexml.com)" "-"

    No error in qis.log indicates that the error was not in the Python code. But qis.log does indicate that the httpd processes were being restarted at that time. Checking the cron log:

    cron: Dec 8 03:47:01 images7 run-parts(/etc/cron.daily)[8987]: starting logrotate Dec 8 03:49:54 images7 run-parts(/etc/cron.daily)[11603]: finished logrotate

    So yes there was a graceful restart in progress. Checking the Apache error log: error_log: [Fri Dec 08 03:50:46 2017] [error] [client 109.111.129.21] Premature end of script headers: runserver.wsgi [Fri Dec 08 03:50:47 2017] [notice] child pid 11703 exit signal Segmentation fault (11)

    We can see that the httpd process crashed at the same time and for the same client IP. Bingo.

    It's going to be hard to find out if this is an issue with mod_wsgi on startup or with something the QIS code is doing e.g. when it forks off the auxiliary processes on the first request. The latter would seem more likely and can be tested seeing as this problem is reproducable. We may also need to try using the latest mod_wsgi instead of the old versions shipped in the standard o/s packages.

    bug wontfix 
    opened by fozcode 4
  • docs: Fix a few typos

    docs: Fix a few typos

    There are small typos in:

    • doc/tuning.md
    • src/imageserver/imaging_pillow.py
    • src/imageserver/static/js/canvas_view.js
    • src/tests/junitxml/init.py

    Fixes:

    • Should read targeting rather than targetting.
    • Should read nothing rather than nnothing.
    • Should read helper rather than heleper.
    • Should read accuracy rather than accurancy.

    Semi-automated pull request generated by https://github.com/timgates42/meticulous/blob/master/docs/NOTE.md

    opened by timgates42 2
  • Bump pillow from 5.2.0 to 6.2.0 in /doc

    Bump pillow from 5.2.0 to 6.2.0 in /doc

    Bumps pillow from 5.2.0 to 6.2.0.

    Release notes

    Sourced from pillow's releases.

    6.2.0

    https://pillow.readthedocs.io/en/stable/releasenotes/6.2.0.html

    6.1.0

    https://pillow.readthedocs.io/en/stable/releasenotes/6.1.0.html

    6.0.0

    No release notes provided.

    5.4.1

    No release notes provided.

    5.4.0

    No release notes provided.

    5.3.0

    No release notes provided.

    Changelog

    Sourced from pillow's changelog.

    6.2.0 (2019-10-01)

    • Catch buffer overruns #4104 [radarhere]

    • Initialize rows_per_strip when RowsPerStrip tag is missing #4034 [cgohlke, radarhere]

    • Raise error if TIFF dimension is a string #4103 [radarhere]

    • Added decompression bomb checks #4102 [radarhere]

    • Fix ImageGrab.grab DPI scaling on Windows 10 version 1607+ #4000 [nulano, radarhere]

    • Corrected negative seeks #4101 [radarhere]

    • Added argument to capture all screens on Windows #3950 [nulano, radarhere]

    • Updated warning to specify when Image.frombuffer defaults will change #4086 [radarhere]

    • Changed WindowsViewer format to PNG #4080 [radarhere]

    • Use TIFF orientation #4063 [radarhere]

    • Raise the same error if a truncated image is loaded a second time #3965 [radarhere]

    • Lazily use ImageFileDirectory_v1 values from Exif #4031 [radarhere]

    • Improved HSV conversion #4004 [radarhere]

    • Added text stroking #3978 [radarhere, hugovk]

    • No more deprecated bdist_wininst .exe installers #4029 [hugovk]

    • Do not allow floodfill to extend into negative coordinates #4017 [radarhere]

    ... (truncated)
    Commits

    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 ignore this [patch|minor|major] version will close this PR and stop Dependabot creating any more for this minor/major 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] 2
  • Add new API for automatic login

    Add new API for automatic login

    Adds a new API and documentation for how to log in to QIS from a 3rd party application so that images in a private folder can be viewed in the browser.

    opened by fozcode 2
  • Remove the user objects from Portfolios API

    Remove the user objects from Portfolios API

    The Portfolios API "helpfully" includes serialized user objects in its output for the owner and history user fields. Unfortunately portfolios can be public facing, and therefore this can leak the username and email address of anyone that has created or interacted with a portfolio. We need to remove these objects, just leaving the owner_id and history user_id fields in place. Anyone that needs to look up the user information will have to do so with a separate call to ensure they have user admin permission.

    The Tasks API also does this but is technically not affected because it should only return the user object of the current user or else only to super users. I think it's best if we delete it from here too though. The current user already knows who they are after all, so it doesn't add much in the common case.

    • [x] Update tests
    • [x] Remove the Portfolio owner object
    • [x] Remove the Portfolio history user object
    • [ ] Remove the Task user object
    • [x] Update the API docs
    api documentation security 
    opened by fozcode 2
  • Base image detection for tiles sometimes seems to fail

    Base image detection for tiles sometimes seems to fail

    Commit fa583f4e7d1d2461057c1be0309832d19f595fad was to fix groups of warnings in the logs like the one below. But the change made was only appropriate for groups of tiles requested very close together in time. These logs show a gap of nearly 40 seconds while still triggering the old warning, which suggests that _get_base_image() was failing to identify the base image for the tile even after it had been generated. The new code will fix this in _get_tile_base_image() but does not address the underlying problem that _get_base_image() should have found the base image in the first place. Therefore this needs more testing using the image parameters shown below.

    2018-11-01 23:10:44,256 qis_16219  WARNING  Tile base generation already performed for 24807277-9-1.jpg IMG:33111,W1160,H1740,Inone,Q75,Krgb,X,D72,E9:16
    2018-11-01 23:10:53,958 qis_16215  WARNING  Tile base generation already performed for 24807277-9-1.jpg IMG:33111,W1160,H1740,Inone,Q75,Krgb,X,D72,E11:16
    2018-11-01 23:10:59,392 qis_16215  WARNING  Tile base generation already performed for 24807277-9-1.jpg IMG:33111,W1160,H1740,Inone,Q75,Krgb,X,D72,E13:16
    2018-11-01 23:11:04,100 qis_16215  WARNING  Tile base generation already performed for 24807277-9-1.jpg IMG:33111,W1160,H1740,Inone,Q75,Krgb,X,D72,E14:16
    2018-11-01 23:11:08,483 qis_16215  WARNING  Tile base generation already performed for 24807277-9-1.jpg IMG:33111,W1160,H1740,Inone,Q75,Krgb,X,D72,E15:16
    2018-11-01 23:11:12,907 qis_16215  WARNING  Tile base generation already performed for 24807277-9-1.jpg IMG:33111,W1160,H1740,Inone,Q75,Krgb,X,D72,E16:16
    2018-11-01 23:11:13,575 qis_16219  WARNING  Tile base generation already performed for 24807277-9-1.jpg IMG:33111,W1160,H1740,Inone,Q75,Krgb,X,D72,E1:16
    2018-11-01 23:11:19,291 qis_16215  WARNING  Tile base generation already performed for 24807277-9-1.jpg IMG:33111,W1160,H1740,Inone,Q75,Krgb,X,D72,E2:16
    2018-11-01 23:11:23,667 qis_16215  WARNING  Tile base generation already performed for 24807277-9-1.jpg IMG:33111,W1160,H1740,Inone,Q75,Krgb,X,D72,E3:16
    2018-11-01 23:11:23,849 qis_16219  WARNING  Tile base generation already performed for 24807277-9-1.jpg IMG:33111,W1160,H1740,Inone,Q75,Krgb,X,D72,E4:16
    

    And another group spread out over nearly 2 minutes:

    2018-11-01 22:47:47,890 qis_22804  WARNING  Tile base generation already performed for 24807215-10-1.jpg IMG:29843,W3192,H2256,Q75,Krgb,X,D72,E45:64
    2018-11-01 22:47:52,282 qis_22803  WARNING  Tile base generation already performed for 24807215-10-1.jpg IMG:29843,W3192,H2256,Q75,Krgb,X,D72,E52:64
    2018-11-01 22:47:52,883 qis_22805  WARNING  Tile base generation already performed for 24807215-10-1.jpg IMG:29843,W3192,H2256,Q75,Krgb,X,D72,E53:64
    2018-11-01 22:47:57,465 qis_22803  WARNING  Tile base generation already performed for 24807215-10-1.jpg IMG:29843,W3192,H2256,Q75,Krgb,X,D72,E35:64
    2018-11-01 22:47:57,880 qis_22805  WARNING  Tile base generation already performed for 24807215-10-1.jpg IMG:29843,W3192,H2256,Q75,Krgb,X,D72,E43:64
    2018-11-01 22:48:02,934 qis_22803  WARNING  Tile base generation already performed for 24807215-10-1.jpg IMG:29843,W3192,H2256,Q75,Krgb,X,D72,E51:64
    2018-11-01 22:48:05,110 qis_22805  WARNING  Tile base generation already performed for 24807215-10-1.jpg IMG:29843,W3192,H2256,Q75,Krgb,X,D72,E59:64
    2018-11-01 22:48:32,599 qis_22805  WARNING  Tile base generation already performed for 24807215-10-1.jpg IMG:29843,W1732,H1224,Q75,Krgb,X,D72,E11:16
    2018-11-01 22:48:32,988 qis_22804  WARNING  Tile base generation already performed for 24807215-10-1.jpg IMG:29843,W6328,H4472,Q75,Krgb,X,D72,E38:64
    2018-11-01 22:48:34,575 qis_22804  WARNING  Tile base generation already performed for 24807215-10-1.jpg IMG:29843,W3192,H2256,Q75,Krgb,X,D72,E31:64
    2018-11-01 22:48:49,628 qis_22804  WARNING  Tile base generation already performed for 24807215-10-1.jpg IMG:29843,W1732,H1224,Q75,Krgb,X,D72,E12:16
    2018-11-01 22:48:50,238 qis_22805  WARNING  Tile base generation already performed for 24807215-10-1.jpg IMG:29843,W1732,H1224,Q75,Krgb,X,D72,E14:16
    2018-11-01 22:48:53,542 qis_22804  WARNING  Tile base generation already performed for 24807215-10-1.jpg IMG:29843,W6328,H4472,Q75,Krgb,X,D72,E46:64
    2018-11-01 22:49:29,973 qis_22803  WARNING  Tile base generation already performed for 24807215-10-1.jpg IMG:29843,W6328,H4472,Q75,Krgb,X,D72,E28:64
    2018-11-01 22:49:30,690 qis_22804  WARNING  Tile base generation already performed for 24807215-10-1.jpg IMG:29843,W6328,H4472,Q75,Krgb,X,D72,E29:64
    
    opened by fozcode 1
  • API - portfolio image reordering returns old value of order_num

    API - portfolio image reordering returns old value of order_num

    The API /api/v1/portfolios/[portfolio id]/images/[image id]/position/ does correctly set the value of order_num in the database, and does return the images in the correct order in the JSON, but the value of order_num in the JSON still contains the old value for the image that was moved.

    I suspect this is a case of SQLAlchemy session caching again, we need to refresh the portfolio-image object in the session. The code already has a line for this at data_manager.py line 1582 but it doesn't seem to be working.

    bug api 
    opened by fozcode 1
  • Images with GPS - the Google map is broken

    Images with GPS - the Google map is broken

    For images that have GPS fields in the EXIF data we display a Google map of its location when viewing the image in the admin area. This map is now degraded.

    From https://cloud.google.com/maps-platform/user-guide/

    In June 2016 we announced that we would stop supporting keyless usage, meaning any request that doesn’t include an API key or Client ID. This went into effect on June 11 2018, and keyless access is no longer supported. Keyless calls to the Maps JavaScript API and Street View API will return low-resolution maps watermarked with “for development purposes only.”

    It is now mandatory to use a billing account and a Static Maps API key. This comes with $200 free monthly credits so it should still be free for most use cases, but we are going to have to get users of the image server to apply for and plug in their own API key. That or we change the map to run from a different service.

    This one needs a quick review by @qururoland

    user interface 
    opened by fozcode 1
  • Bump python-ldap from 3.1.0 to 3.4.0 in /doc

    Bump python-ldap from 3.1.0 to 3.4.0 in /doc

    Bumps python-ldap from 3.1.0 to 3.4.0.

    Release notes

    Sourced from python-ldap's releases.

    3.4.0

    This release requires Python 3.6 or above, and is tested with Python 3.6 to 3.10. Python 2 is no longer supported.

    New code in the python-ldap project is available under the MIT licence (available in LICENCE.MIT in the source). Several contributors have agreed to apply this licence their previous contributions as well. See the README for details.

    The following undocumented functions are deprecated and scheduled for removal:

    • ldap.cidict.strlist_intersection
    • ldap.cidict.strlist_minus
    • ldap.cidict.strlist_union

    Security fixes:

    • Fix inefficient regular expression which allows denial-of-service attacks when parsing specially-crafted LDAP schema. (GHSL-2021-117)

    Changes:

    • On MacOS, remove option to make LDAP connections from a file descriptor when built with the system libldap (which lacks the underlying function, ldap_init_fd)
    • Attribute values of the post read control are now bytes instead of ISO8859-1 decoded str
    • LDAPUrl now treats urlscheme as case-insensitive
    • Several OpenLDAP options are now supported:
      • OPT_X_TLS_REQUIRE_SAN
      • OPT_X_SASL_SSF_EXTERNAL
      • OPT_X_TLS_PEERCERT

    Fixes:

    • The copy() method of cidict was added back. It was unintentionally removed in 3.3.0
    • Fixed getting/setting SASL options on big endian platforms
    • Unknown LDAP result code are now converted to LDAPexception, rather than raising a SystemError.

    slapdtest:

    • Show stderr of slapd -Ttest
    • SlapdObject uses directory-based configuration of slapd
    • SlapdObject startup is now faster

    Infrastructure:

    • CI now runs on GitHub Actions rather than Travis CI.

    3.3.1

    Released 3.3.1 2020-06-29

    ... (truncated)

    Commits

    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 python-ldap from 3.1.0 to 3.4.0

    Bump python-ldap from 3.1.0 to 3.4.0

    Bumps python-ldap from 3.1.0 to 3.4.0.

    Release notes

    Sourced from python-ldap's releases.

    3.4.0

    This release requires Python 3.6 or above, and is tested with Python 3.6 to 3.10. Python 2 is no longer supported.

    New code in the python-ldap project is available under the MIT licence (available in LICENCE.MIT in the source). Several contributors have agreed to apply this licence their previous contributions as well. See the README for details.

    The following undocumented functions are deprecated and scheduled for removal:

    • ldap.cidict.strlist_intersection
    • ldap.cidict.strlist_minus
    • ldap.cidict.strlist_union

    Security fixes:

    • Fix inefficient regular expression which allows denial-of-service attacks when parsing specially-crafted LDAP schema. (GHSL-2021-117)

    Changes:

    • On MacOS, remove option to make LDAP connections from a file descriptor when built with the system libldap (which lacks the underlying function, ldap_init_fd)
    • Attribute values of the post read control are now bytes instead of ISO8859-1 decoded str
    • LDAPUrl now treats urlscheme as case-insensitive
    • Several OpenLDAP options are now supported:
      • OPT_X_TLS_REQUIRE_SAN
      • OPT_X_SASL_SSF_EXTERNAL
      • OPT_X_TLS_PEERCERT

    Fixes:

    • The copy() method of cidict was added back. It was unintentionally removed in 3.3.0
    • Fixed getting/setting SASL options on big endian platforms
    • Unknown LDAP result code are now converted to LDAPexception, rather than raising a SystemError.

    slapdtest:

    • Show stderr of slapd -Ttest
    • SlapdObject uses directory-based configuration of slapd
    • SlapdObject startup is now faster

    Infrastructure:

    • CI now runs on GitHub Actions rather than Travis CI.

    3.3.1

    Released 3.3.1 2020-06-29

    ... (truncated)

    Commits

    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
  • User Management via OpenID Connect

    User Management via OpenID Connect

    Hi,

    in our project we use QIS as our image server, which the users upload images via REST from our React SPA. Currently the app authenticates via a single user which acts as a service account. I am wondering though, if it is possible to connect QIS to our IDM via OpenID Connect. [1]

    Ultimately the user would have ownership about his images and we could implement access control bases on permissions managed via the IDM. The user's profile picture for example could be private for example, whereas images the of something like a blog post [2] would be visible to. any logged in user.

    Bests, Martin

    [1] We use Keycloak as IDM. [2] just an example

    opened by martnst 4
  • Improve the Docker deployment

    Improve the Docker deployment

    At present the Docker files and docker-compose script don't make it easy to install TLS certs or to override the QIS settings. We're also using an env var for the database password from the days before docker-compose had secrets support. I propose:

    • [ ] Change the database password to use a Docker secret
    • [ ] Update the AS Dockerfile, run script, and docker-compose file to mount TLS files from Docker secrets**
    • [ ] Update the AS Dockerfile, run script, and docker-compose file to allow the local_settings.py file to be overridden**
    • [ ] Update the README for the AS image
    • [ ] Update the README for the Postgres image
    • [ ] Update the running.md guide

    ** This also allows multiple AS containers to use the same certs and session secret for load balancing

    opened by fozcode 0
  • Contrast adjustments

    Contrast adjustments

    opened by qururoland 0
  • Converting colours to transparency

    Converting colours to transparency

    With the mask it is possible to make an image into a circle (have a white mask with a transparent circle in the middle and overlay it over the image) however the circular image remains on a coloured background. Would it be possible to convert the colour of the background to transparent?

    To find the colour in a simple mask: convert mask.gif -format %c -colorspace LAB -colors 5 histogram:info:- | sort -n -r | grep -v "#00000000" will show the 5 most dominant colours in the image. convert image.png -fuzz 20% -transparent "#ff00ffff" transparentimage.png will make all #ff00ffff pixels transparent.

    Note that glflib is possibly quicker for getting the colour (need giflib-tools) gifclrmp mask.gif | grep -r "#00000000"`

    Note that 2 colour gif palettes for the mask make this much easier. The fuzz option (ie needed for anti-aliasing etc) might need playing with.

    It is possible that someone might want to make a colour in the original image transparent rather than in a mask...

    opened by qururoland 0
Releases(v4.1.4)
  • v4.1.4(Oct 3, 2019)

    This release makes a few changes for QIS to integrate more easily with an existing web site.

    • Allow cross-origin file uploads by default (still requires a valid API auth token)
    • Only serve TLS 1.2+ by default
    • Record the x-forwarded-for header in the Apache access logs
    • Add a new web session background login API - turns an API auth token into a QIS session cookie - for displaying images on a web site that require the user to be logged into QIS
    • Add a .well-known directory and URL - for Let's Encrypt verification and other uses

    Bug fixes:

    • Docker deployments - add missing documentation in running.md for setting the ownership of host directories when using Docker on Linux (issue #28)
    Source code(tar.gz)
    Source code(zip)
    QIS-4.1.4.tar.gz(15.60 MB)
    QIS-libs-centos-7-py35-x86_64.tar.gz(8.80 MB)
    QIS-libs-rhel-7-py35-x86_64.tar.gz(8.79 MB)
    QIS-libs-ubuntu-16-py35-x86_64.tar.gz(8.80 MB)
    QIS-libs-ubuntu-18-py36-x86_64.tar.gz(8.85 MB)
  • v4.1.2(Mar 19, 2019)

    This release removes the test_images folder from the application bundle. This folder previously contained a mixture of images needed in development for testing along with a few sample images used in the online documentation. As the testing files are not normally needed they have been removed, while the required sample images have been improved and moved into a new samples folder. This change reduces the application bundle size from 54MB to 16MB.

    Other changes:

    • Changed the admin site font and logo to match quruimageserver.com
    • Bug fix to the image cropping tool on touchscreen devices (the publish and playground screens)
    Source code(tar.gz)
    Source code(zip)
    QIS-4.1.2.tar.gz(15.59 MB)
    QIS-libs-centos-7-py35-x86_64.tar.gz(8.71 MB)
    QIS-libs-rhel-7-py35-x86_64.tar.gz(8.70 MB)
    QIS-libs-ubuntu-16-py35-x86_64.tar.gz(8.71 MB)
    QIS-libs-ubuntu-18-py36-x86_64.tar.gz(8.76 MB)
  • v4.1.0(Nov 2, 2018)

    This release mostly addresses API behaviour that was either buggy, inconsistent, or not working as intended. There are also a few other fixes, listed below.

    API changes:

    • 404 not found, 405 method not supported, 301 redirect (missing trailing slash) errors and many others now return JSON objects in the standard format instead of HTML error messages
    • Return status 404 instead of 200 when a file or folder is deleted a second time (since the file/folder no longer exists the second time around)
    • The image object was being returned as 3 different structures and has now been standardised. As well as the standard fields it now always includes the calculated fields: url, download, supported, and filename.
    • The image object was sometimes being returned with the audit trail history field present if (and only if) the file was newly detected on the server. This was not documented or intended and no longer happens.
    • The user and owner objects are no longer returned from the Portfolios functions. These were potentially leaking names and email addresses to users who should not have access to user information. The remaining user_id and owner_id fields can be used to look up user information if permitted.
    • There is a new method to retrieve a portfolio by its human_id field
    • The human_id field on portfolios is no longer allowed to contain any of the characters: %<>&.?:/
    • When reordering images in a portfolio, the order_num field now returns the correct value for the image moved (it was already correct for the others)
    • The user list and folder list functions no longer return deleted records by default. Both now take a new status parameter that can be used to request deleted records or to restore the old behaviour. The image list function is unchanged, it never returned deleted records.
    • API documentation improvements - clarifying URL parameters vs post/put data, added more examples and descriptions of examples

    Other changes:

    • As a result of the Google Maps API now requiring a Google account and an API key, the embedded map (when viewing the details of an image that has GPS tags) has been changed to use OpenStreetMap
    • Enabled ico files by default in the Premium edition

    Other bug fixes:

    • Fix creation of new user accounts when using LDAP authentication
    • Fix "Timed out waiting for image template data" warning from wrongly appearing in the logs
    • Fix "Tile base generation already performed" warning from wrongly appearing in the logs
    Source code(tar.gz)
    Source code(zip)
    QIS-4.1.0.tar.gz(53.48 MB)
    QIS-libs-centos-7-py35-x86_64.tar.gz(8.66 MB)
    QIS-libs-rhel-7-py35-x86_64.tar.gz(8.65 MB)
    QIS-libs-ubuntu-16-py35-x86_64.tar.gz(8.66 MB)
  • v4.0.0(Jul 12, 2018)

    This is the first release of QIS that runs "out of the box" without requiring Quru's image processing library qismagick.so. The image server can now run in 2 modes:

    • Basic edition (default mode, fully open source) - supports image resizing, cropping, rotation and the JPG, PNG, GIF and TIF file formats; supports all the JavaScript image viewers, gallery, carousel, the administration web interface, the API and all admin functions

    • Premium edition (optional upgrade) - available with the purchase of an annual subscription, installs an extra library to add color profile (ICC) support, colorspace conversion, overlays/watermarks, image <--> PDF conversion, support for digital camera RAW files and many other file types such as SVG. Commercial support options are also available from Quru for the premium edition.

    The Basic edition uses the Python Pillow library for imaging operations, while the Premium edition instead uses the ImageMagick package along with Quru's qismagick.so library. The application overview contains more information about the differences.

    Other changes:

    • Python library dependencies have been upgraded, including Flask to v1.0.2, pyldap switched back to python-ldap (now that it has Python 3 support), and Pillow for the first time as v5.2
    • Added a new system setting IMAGE_RESIZE_GAMMA_CORRECT, defaulting to True
      • This can be changed to False with the Pillow back-end for much faster image resizing, if speed is more important than color correctness

    Bug fixes:

    • Setting a value for tile in a template caused various errors. This is not possible in the web interface but can be done using the API, and now works as expected.
    • The image server does not allow image enlargements, but width and height limits were not properly applied when even a tiny amount of rotation was applied. The maximum width and height of an image is now its original size plus an allowance for the exact amount of rotation applied.
    Source code(tar.gz)
    Source code(zip)
    QIS-4.0.0.tar.gz(53.47 MB)
    QIS-libs-centos-7-py35-x86_64.tar.gz(8.70 MB)
    QIS-libs-rhel-7-py35-x86_64.tar.gz(8.70 MB)
    QIS-libs-ubuntu-16-py35-x86_64.tar.gz(8.70 MB)
  • v3.1.0(Jun 1, 2018)

    This release contains user interface and documentation improvements, and an optional new public demo/playground page for seeing the effect of different imaging operations.

    • Added a new application overview page, which is also available from the Help menu
    • Added new help text in the administration area
    • Various user interface improvements, use a larger font in form elements
    • Added a password confirmation field to detect typos during password changes
    • Passwords must now be between 8 and 120 characters

    Bug fixes:

    • Intermittent startup error (database locking race condition)
    • Fixed SELinux policy on CentOS/Red Hat, which was not allowing log file rotation

    Playground page:

    There is a new public-facing demo/playground page that allows various imaging operations to be tried out against a sample image (or a folder of images). This feature is disabled by default. To enable it, add the following settings to your local_settings.py file:

    • DEMO_IMAGE_PATH - the path to either a single image or a folder of images
    • DEMO_OVERLAY_IMAGE_PATH - the path to a single image to use as an overlay/watermark

    E.g.

    # Enable the demo page at http://images.example.com/demo/
    DEMO_IMAGE_PATH = "/test_images/cathedral.jpg"
    DEMO_OVERLAY_IMAGE_PATH = "/test_images/quru470.png"
    
    Source code(tar.gz)
    Source code(zip)
    QIS-libs-centos-7-py35-x86_64.tar.gz(4.48 MB)
    QIS-libs-rhel-7-py35-x86_64.tar.gz(4.48 MB)
    QIS-libs-ubuntu-16-py35-x86_64.tar.gz(4.46 MB)
  • v3.0.1(Apr 27, 2018)

    This release contains bug fixes and enhancements to the image upload page and API. A few configuration problems (mainly affecting Ubuntu 16 deployments) were also found following the move to Python 3, which are fixed in the documentation and Dockerfiles in this release.

    The main changes are:

    • Added a workaround for a bug in Safari 11 that was prevent the upload page from working
    • The drag and drop feature on the image upload page now supports multiple drops. Previously, performing a second drag and drop overwrote the files from the first. Now, performing a second drag and drop adds more files to those already there.
    • The addition of a new option on the image upload page, to rename an incoming file instead of returning an error, if a file with the same filename already exists on the server.
    • Bug fix to the image upload to prevent an "already exists" error when uploading 2 different images with the same filename at the same time.
    • Bug fix to the image upload to prevent an "already exists" error when 2 images are uploaded with similar filenames containing "unsafe" characters, e.g. my/file.jpg and my:file.jpg.
    • Bug fix to the image upload to prevent client-side folder paths becoming part of the server-side filename. Web browsers do not provide the full path of files when uploading, so this only affected certain clients and the API e.g. using curl.
    • The same changes to the image upload API.
    • The image upload API now allows files to be uploaded into the root images folder.
    Source code(tar.gz)
    Source code(zip)
    QIS-libs-centos-7-py35-x86_64.tar.gz(4.48 MB)
    QIS-libs-rhel-7-py35-x86_64.tar.gz(4.48 MB)
    QIS-libs-ubuntu-16-py35-x86_64.tar.gz(4.46 MB)
  • v3.0.0(Apr 18, 2018)

    QIS v3.0.0 is a port of QIS v2.7 to run on Python 3.4 and above only. It contains a few tidy-ups, slightly better performance (around 10%) thanks to improvements in Python 3, but otherwise no major new features.

    To upgrade an existing installation please follow the upgrading guide. For new installations see the install guide and Docker images.

    The v2.x code (which supports Python 2.6 and 2.7), documentation and build scripts, can be found in the v2 branch but is not likely to receive any new features.

    Source code(tar.gz)
    Source code(zip)
    QIS-libs-centos-7-py35-x86_64.tar.gz(4.48 MB)
    QIS-libs-rhel-7-py35-x86_64.tar.gz(4.48 MB)
    QIS-libs-ubuntu-16-py35-x86_64.tar.gz(4.46 MB)
  • v2.7.0(Apr 13, 2018)

    In response to a feature request, the back-end of the portfolios feature has been implemented. This allows the creation of a collection of images (like a virtual folder) that can be viewed together, altered together (e.g. resized to the same dimensions) and downloaded with or without changes as a single zip file.

    There is a new rather basic web page for viewing a portfolio, but otherwise the front-end administration UI does not yet support the creation and management of portfolios.

    For more information and a technical description of this new feature, see the portfolios specification. For examples of how to use the new API, see the API user guide.

    This change has been fully integrated into the ongoing python3 branch, which will soon be released as QIS v3.0.

    Source code(tar.gz)
    Source code(zip)
    QIS-libs-centos-7-py27-x86_64.tar.gz(4.33 MB)
    QIS-libs-rhel-7-py27-x86_64.tar.gz(4.33 MB)
    QIS-libs-ubuntu-16-py27-x86_64.tar.gz(4.33 MB)
  • v2.6.5(Feb 5, 2018)

    This release contains only revised build and packaging scripts, there are no functional changes to the application.

    The pre-packaged Python library bundle has been renamed from dependencies.tar.gz to QIS-libs-osname-version-platform.tar.gz. Installation of this is now simpler than before, and binaries for popular platforms will be attached to the releases from this version onwards.

    There is a new utility for querying the installed version of the application:

    $ python /opt/qis/src/imageserver/__about__.py --version
    2.6.5
    
    Source code(tar.gz)
    Source code(zip)
    QIS-libs-centos-7-py27-x86_64.tar.gz(4.33 MB)
    QIS-libs-rhel-7-py27-x86_64.tar.gz(4.33 MB)
    QIS-libs-ubuntu-16-py27-x86_64.tar.gz(4.33 MB)
  • v2.6.4(Jan 31, 2018)

    This may be the final release of QIS that supports Python 2.6 and 2.7. It is becoming increasingly hard to maintain compatibility with Python 2.6 in particular, with standard tools such as pip having now dropped support for 2.6 in their latest releases. Python 2.7 also has less than 2 years of support remaining.

    The python3 branch of QIS is working well, it is fully up to date with master and all tests are passing. Once the build scripts and documentation have been updated, this branch will be released as QIS v3 and will support Python 3.4+ only.

    v2.6.0 Removal of MooTools from the public JavaScript libraries. The zoom viewer, gallery, and slideshow are now implemented in vanilla JavaScript and have no other dependencies. A nice side effect of this is that animations are much smoother, and CPU usage lower.

    As part of this, support for IE8 is dropped and there are a number of changes to the filenames and paths of the JavaScript libraries, so this should arguably be a major release. An upgrade script is provided that keeps compatibility with v2.5 in the majority of cases - please follow the upgrading guide.

    • Remove MooTools library from the public image viewers, gallery and slideshow
    • Use CORS instead of JSONP in the image viewers, gallery and slideshow
    • Standardise JavaScript file naming
    • Drop support for IE8 and below
    • Allow indexing of images in robots.txt

    v2.6.1 API URL changes for better consistency

    • Most API URLs required a trailing slash, but some required no trailing slash, so this inconsistency has been fixed for:
      • https://images.example.com/api/v1/list/
      • https://images.example.com/api/v1/details/
      • https://images.example.com/api/v1/token/
      • https://images.example.com/api/v1/upload/
    • The previous URLs (without a trailing slash) are still supported
    • Fixed regression in v2.6.0 with image zooming direction

    v2.6.2 Bumped Python dependencies to the latest supported versions

    v2.6.3 Bug fixes

    • Fix image zooming on touch-screen enabled laptops
      • This is an improvement but different devices and browsers seem to be confused in whether they should send touch or mouse events
    • Fix longest response time stats (they were last minute instead of last hour)

    v2.6.4 Folder list API change

    The folder list function has been changed, but only to affect folders that contain non-image files. Previously non-image files were silently hidden, which could have been misleading and introduced a bug with pagination. All files are now returned, along with a new supported flag in the data that indicates whether each file is a supported image type. With this change the API now matches the existing behaviour of folder browsing in the admin user interface.

    • Return all files in a folder, plus a new supported flag to indicate whether each file is a supported image
    • Fix for data loading race condition on startup
    • Improved error handling at startup, try to get error messages into qis.log even if the application is unable to start
    Source code(tar.gz)
    Source code(zip)
  • v2.5.1(Aug 24, 2017)

    v2.5.0 This release adds a new image lazy-loading Javascript library, allowing web pages to only request images from the server when they become visible in the browser. This library is open source and also available from Quru's GitHub repo.

    • The image publisher has a new output type of "lazy loaded image"
    • The grid/thumbnail file browse mode (new in v2.4.0) now uses lazy loaded images

    v2.5.1 Adds a bug fix for Active Directory authentication

    • Prevent unhandled exception on username not found condition
    Source code(tar.gz)
    Source code(zip)
  • v2.4.0(May 8, 2017)

    This is a major release that makes image templates a cornerstone of image generation and brings several new features. To run QIS you still need to contact Quru to request the binary qismagick.so imaging library.

    Version 2 brings these new features:

    • Image templates are now stored in the database and managed from the web interface inside QIS
    • Default image values (format, compression, EXIF stripping, etc) are now defined in a default image template, and can be changed from the web interface inside QIS
    • Any image parameter can now have a default value (in the default template)
    • Simpler override rules for image parameters
    • REST API improvements, including programmatic template management
    • Improvements to SVG file support
    • Built-in support for RAW digital camera image formats
    • Faster image serving for logged-in users (and authenticated API callers)
    • Bug fixes to the image publisher
    • Web interface improvements
      • New grid / thumbnail browse view
      • New icons and a more consistent page layout
      • New next/previous image navigation
      • The order of files and folders in the web interface is no longer case sensitive

    An upgrade script is provided to migrate v1 installations to v2, including the import of image templates from flat files into the database. For more information on how to upgrade, see the upgrading guide.

    Source code(tar.gz)
    Source code(zip)
  • v1.51(Mar 6, 2017)

    This will be the final release of the v1.x series. To run QIS you still need to contact Quru to request the binary qismagick.so imaging library.

    Changes since v1.50:

    • Docker deployment re-written to run from a docker-compose file and to run on Ubuntu instead of Fedora (this is backported from the v2 branch)

    Bug fixes:

    • Downgrade the Markdown version, as the more recent versions do not support Python 2.6
    • Fix an intermittent mapper already defined error on startup
    • The sample Ubuntu Apache config contained an incorrect group name
    • Fix a whitespace error preventing authenticating on some LDAP servers

    You can also see the change log for more information.

    Source code(tar.gz)
    Source code(zip)
  • v1.50(Sep 23, 2016)

    This release is likely to be the last of the v1.x series before v2 is ready. To run QIS you still need to contact Quru to request the binary qismagick.so imaging library.

    Changes since the v1.42 release:

    • qismagick.so now has built-in support for reading RAW image files (as ImageMagick doesn't do a very good job of it), and is bumped to v2.0.0 as it is not compatible with older releases
    • RAW file types are now enabled by default in base_settings.py
      • If you override IMAGE_FORMATS in your local_settings.py file, you will need to add the RAW file formats if you want to support them
    • Added basic support for secure LDAP (LDAPS) authentication
    • Bug fixes to Active Directory authentication support
    • Associated changes to base_settings.py
      • LDAP_AUTO_CREATE_USER_ACCOUNTS is removed
      • LDAP_SECURE is added
    • Bug fixes to SVG file support
    • Library version upgrades
      • SQLAlchemy 1.0.15
      • python-ldap 2.4.27
      • pylibmc 1.5.1
      • psycopg2 2.6.2

    Breaking changes:

    • Unlike most releases, the interface to qismagick.so v2.0.0 is not backwards or forwards compatible with other releases

    You can also see the change log for more information.

    Source code(tar.gz)
    Source code(zip)
  • v1.42(Nov 23, 2015)

    This release includes bug fixes and changes made for the v2 branch that were also easy or useful to provide for v1. To run QIS you still need to contact Quru to request the binary qismagick.so imaging library.

    Changes since the last release (v1.34):

    • Bump SQLAlchemy version to 0.9.10
    • Bug fix to make usernames case insensitive
      • To upgrade your existing database, run this script against the qis-mgmt database:
        DROP INDEX idx_us_username;
        CREATE UNIQUE INDEX idx_us_username ON users (lower(username));
    • Folder management REST API made more consistent:
      • Folder ID is now returned from the image details API
      • New API functions to query a folder by path or ID
      • Sub-folders are no longer returned when moving or deleting a folder
      • When a long-running task response is returned, the task can now be queried without requiring superuser permission
    • qismagick.so updated to flatten layers in xcf and psd files
      • Previously only the first layer was returned
      • There are still problems with layer opacity in ImageMagick versions below 6.9.1-4
    • Added a new custom HTTP response header X-Time-Taken, which gives the time taken in microseconds inside the QIS application from the request arriving to the response being returned
      • Apache log format changed to log this alongside Apache's total time taken (which also includes queuing time and time to stream the response data back to the client)
      • Benchmark script updated to report the average X-Time-Taken against the average total request+response time

    You can also see the change log for more information.

    Source code(tar.gz)
    Source code(zip)
  • v1.34(Oct 12, 2015)

    This is the first release of the QIS v1 branch since it became (mostly) open source. To run QIS you still need to contact Quru to request the binary qismagick.so imaging library. Work on the v2 branch continues apace.

    Changes in this release:

    • HTML5 responsive images (via the picture element or srcset attribute) can now be generated by the image publisher
    • The undocumented recache=1 image parameter is now disabled by default so that it cannot cause performance problems should an image URL containing it be accidentally published. The image Reset command, in the admin site, can still be used to perform this function if required.
    • For similar reasons, the undocumented cache=0 image parameter is now only enabled for admin functions by logged in users.
    • Help pages in the admin site should now be cached by the browser
    • Bug fix to the base image selection when applying a colour profile
    • Running the benchmarking tool now requires the system setting BENCHMARKING = True
    Source code(tar.gz)
    Source code(zip)
Owner
Quru
IT services, consultancy, and software development
Quru
PyGtk Color - A couple of python scripts to select a color (for scripting usage)

Selection Scripts This repository contains two scripts to be used within a scripting project, to aquire a color value. Both scripts requir

Spiros Georgaras 1 Oct 31, 2021
MyPaint is a simple drawing and painting program that works well with Wacom-style graphics tablets.

MyPaint A fast and dead-simple painting app for artists Features Infinite canvas Extremely configurable brushes Distraction-free fullscreen mode Exten

MyPaint 2.3k Jan 01, 2023
EmbedToolV2 - 2.0 Version of DraKenCodeZ/ImageEmbedTool

EmbedToolV2 - 2.0 Version of DraKenCodeZ/ImageEmbedTool

DraKenCodeZ 1 Dec 07, 2021
A linear stairs generation add-on for Blender

Linear Stairs Generator Table of Contents Installation Usage Screenshots Important Notes Requirements Blender 3.0 or newer. Installation: Download a z

Elhanan Flesch 4 May 17, 2022
reversable image censoring tool

StupidCensor a REVERSABLE image censoring tool to reversably mosiac censor jpeg files to temporarily remove image details not allowed on most websites

2 Jan 28, 2022
Png2Jpg tool will help you convert from png image format to jpg images format.

PNG 2 JPG All codes assume running from root directory. Please update the sys path at the beginning of the codes before running. Over View Png2Jpg too

Nguyễn Trường Lâu 2 Dec 27, 2021
Automatic picture transmission(APT) protocol decoder for NOAA weather satellites

Automatic picture transmission(APT) decoder Automatic picture transmission protocol is used by NOAA satellites. They constantly send a frequency modul

Jayachandra Kasarla 25 Aug 05, 2022
Extracts dominating colors from an image and presents them as a palette.

ColorPalette A simple web app to extract dominant colors from an image. Demo Live View it live at : https://colorpalettedemo.herokuapp.com/ You can de

Mayank Nader 214 Dec 29, 2022
HTML2Image is a lightweight Python package that acts as a wrapper around the headless mode of existing web browsers to generate images from URLs and from HTML+CSS strings or files.

A package acting as a wrapper around the headless mode of existing web browsers to generate images from URLs and from HTML+CSS strings or files.

176 Jan 01, 2023
Anaglyph 3D Converter - A python script that adds a 3D anaglyph style effect to an image using the Pillow image processing package.

Anaglyph 3D Converter - A python script that adds a 3D anaglyph style effect to an image using the Pillow image processing package.

Kizdude 2 Jan 22, 2022
A Python Script to convert Normal PNG Image to Apple iDOT PNG Image.

idot-png-encoder A Python Script to convert Normal PNG Image to Apple iDOT PNG Image (Multi-threaded Decoding PNG). Usage idotpngencoder.py -i inputf

Lrdcq 2 Feb 17, 2022
Kimimaro: Skeletonize Densely Labeled Images

Kimimaro: Skeletonize Densely Labeled Images # Produce SWC files from volumetric images. kimimaro forge labels.npy --progress # writes to ./kimimaro_o

92 Dec 17, 2022
Fuzzware is a project for automated, self-configuring fuzzing of firmware images

Fuzzware Fuzzware is a project for automated, self-configuring fuzzing of firmware images. The idea of this project is to configure the memory ranges

190 Dec 21, 2022
粉專/IG圖文加工器

粉專/IG圖文加工器 介紹 給PS智障(ex:我)使用,用於產生圖文 腳本省去每次重複步驟 可載入圖片(方形,請先處理過,歡迎PR) 圖片簡易套用濾鏡 可將圖片切片 要求 Python 版本 3.9 安裝 安裝最新 python pip3 install -r requirement.txt 效果

Louis Tang 7 Aug 10, 2022
A tool to maintain an archive/mirror of your Google Photos library for backup purposes.

Google Photos Archiver Updated Instructions 8/9/2021 Version 2.0.6 Instructions: Download the script (exe or python script listed below) Follow the in

Nick Dawson 116 Jan 03, 2023
A scalable implementation of WobblyStitcher for 3D microscopy images

WobblyStitcher Introduction A scalable implementation of WobblyStitcher Dependencies $ python -m pip install numpy scikit-image Visualization ImageJ

CSE Lab, ETH Zurich 7 Jul 25, 2022
ProsePainter combines direct digital painting with real-time guided machine-learning based image optimization.

ProsePainter Create images by painting with words. ProsePainter combines direct digital painting with real-time guided machine-learning based image op

Morphogen 276 Dec 17, 2022
display: a browser-based graphics server

display: a browser-based graphics server Installation Quick Start Usage Development A very lightweight display server for Torch. Best used as a remote

Szymon Jakubczak 205 Oct 17, 2022
Create a 2D mesh for an airfoil in GMSH using python.

GMSHFoil A simple class to create a 2D mesh for an airfoil in GMSH using python. Requirements pip install airfoils

Charilaos Mylonas 1 May 16, 2022
A large-scale dataset of both raw MRI measurements and clinical MRI images

fastMRI is a collaborative research project from Facebook AI Research (FAIR) and NYU Langone Health to investigate the use of AI to make MRI scans faster. NYU Langone Health has released fully anonym

Facebook Research 907 Jan 04, 2023