tacnoman / thumcno
Package to serve your thumbnails
Requires
- php: >=5.3.0
- codeception/codeception: ^2.2
- katzgrau/klogger: dev-master
- symfony/console: *
- vlucas/phpdotenv: ^2.4
This package is auto-updated.
Last update: 2024-12-13 11:34:37 UTC
README
Thumcno - A Tacno Thumbnail Generator in runtime
Pre requisites
To use thumcno, you need install the php-gd first.
$ sudo apt-get install php-gd # Ubuntu $ sudo yum install php-gd # CentOs $ brew install php-gd # Mac OS
You must install composer too. [https://getcomposer.org/]
Installation
git clone git@github.com:tacnoman/thumcno.git cd thumcno composer install php thumcno config # Follow the instructions php thumcno serve
Based on timthumb: http://www.binarymoon.co.uk/projects/timthumb/
You can use for any projects with different domains.
How it works?
There are many solutions to crop images. I like the timthumb solution. The request goes to a php file with params. The crop happen in runtime and generate a cache file. The Thumcno project, add a security for this and reuse for multiple projects. It's veeeery easy to use! I'll show you!
First step:
You need to add your custom domain. You could run:
php thumcno domain:add img.mydomain.com
This command will generate a file called img.mydomain.com.ini
in /app/apps
directory.
This file contains the custom configuration for this domain (example: cache directory, etc).
This params will replace the params in default.ini (you can change it).
This is the default.ini
.
; This document has default params
port = 80
debug_on = true ; Enable debug logging to web server error log. Remember to update this param in your app
debug_level = 1 ; Debug level 1 is less noisy and 3 is the most noisy
memory_limit = 30M ; Set PHP memory limit
block_external_leechers = false ; If the image or webshot is being loaded on an external site, display a red "No Hotlinking" gif.
display_error_messages = true ; Display error messages. Set to false to turn off errors (good for production websites)
allow_external = false ; Allow image fetching from external websites. Will check against ALLOWED_SITES if ALLOW_ALL_EXTERNAL_SITES is false
allow_external_sites = false ; Less secure.
file_cache_enabled = true ; Should we store resized/modified images on disk to speed things up?
file_cache_time_between_cleans = 86400 ; How often the cache is cleaned
file_cache_max_file_age = 86400 ; How old does a file have to be to be deleted from the cache
file_cache_suffix = .thumcno ; What to put at the end of all files in the cache directory so we can identify them
file_cache_prefix = null ; What to put at the beg of all files in the cache directory so we can identify them
file_cache_directory = cache ; Directory where images are cached. Left blank it will use the system temporary directory (which is better for security)
max_file_size = 10485760 ; 10 Megs is 10485760. This is the max internal or external file size that we'll process.
curl_timeout = 20 ; Timeout duration for Curl. This only applies if you have Curl installed and aren't using PHP's default URL fetching mechanism.
wait_between_fetch_errors = 3600; Time to wait between errors fetching remote file
; Browser caching
browser_cache_max_age = 864000 ; Time to cache in the browser
browser_cache_disable = false ; Use for testing if you want to disable all browser caching
; Image size and defaults
max_width = 1500 ; Maximum image width
max_height = 1500 ; Maximum image height
not_found_image = null ; Image to serve if any 404 occurs
error_image = '' ; Image to serve if an error occurs instead of showing error message
png_is_transparent = true; Define if a png image should have a transparent background color. Use False value if you want to display a custom coloured canvas_colour
default_q = 90 ; Default image quality. Allows overrid in timthumb-config.php
default_zc = 1 ; Default zoom/crop setting. Allows overrid in timthumb-config.php
default_f = null ; Default image filters. Allows overrid in timthumb-config.php
default_s = 0 ; Default sharpen value. Allows overrid in timthumb-config.php
default_cc = ffffff ; Default canvas colour. Allows overrid in timthumb-config.php
default_width = 100 ; Default thumbnail width. Allows overrid in timthumb-config.php
default_height = 100 ; Default thumbnail height. Allows overrid in timthumb-config.php
You need to replace only the necessary.
See working in local machine
To see in your local machine, run this commands:
cd /path/to/thumcno
php thumcno config
php thumcno serve
Running with Docker
docker run -it -p 8888:80 tacnoman/thumcno ./thumcno server
# Sharing folder
docker run -it -p 8888:80 -v /path/to/thumcno/apps:/app/apps -v /path/to/thumcno/example_images:/app/example_images tacnoman/thumcno ./thumcno server
Using with docker-compose
TODO THIS!
Now, go to your browser and open the url:
http://localhost:8888/?src=/dubai.jpg&w=200&h=200&q=80
You will see this:
Possible params
This list is the params that you can pass in url ($_GET):
Set possible sizes
If you don't set the sizes, you could have a big security problem!
Suppose that your URI is this <w>/<h>/<src>
. A hacker could make a script to generate ALL POSSIBLE SIZES in cache.
But, you can define the possible sizes to generate in your website. It's simple:
; <your_domain>.ini
; Possible_sizes
[sizes]
thumb = 30x30
medium = 200x200
large = 800x800
Now, you can generate thumbs only with sizes 30x30, 200x200 and 800x800.
If you don't want to show the size in the URL, you can use the style
(like paperclip for ruby).
The style will replace the size. An example for this config is:
; <your_domain>.ini [styles] medium = 500x500 big = 800x700
http://<domain>/?src=dubai.jpg&style=medium
-> Without friendly url.
http://<domain>/medium/dubai.jpg
-> Considering a friendly url, where the uri is /(?P<style>\w+)/(?P<src>(\w|-|\.)+)
.
URL Friendly
If you want to use friendly urls, you can set the params in your .ini file passing the URLS params. (You must know abour regex)
The param is route
and you can use the same url params in this format:
(?P<name_of_param>\regex)
ex: (?P<w>\d+) -> Regex for para w (width) accepting only integers values
Another example:
^\/(?P<w>\d+)x(?P<h>\d+)\/(?P<q>\d{1,3})\/?
/<width>x<height>/<quality>/?src=example_images/dubai.jpg
One more example:
^\/(?P<w>\d+)x(?P<h>\d+)\/(?P<q>\d{1,3})\/(?<src>[\w.-]+)?
/<width>x<height>/<quality>/<source.jpg>
http://localhost:8080/200x200/80/dubai.jpg
Ps: If you don't set any params in your regex, you can pass like $_GET param.
Bugs
Send-me an email: <renatocassino@gmail.com>.