Giter VIP home page Giter VIP logo

resize's Introduction

Resize

High Performance Image Processing Component for Nette Framework

Build Status Coverage Status Code Climate Scrutinizer Code Quality

Installation

Download the latest package manually or better use the composer

composer require rostenkowski/resize

Configuration

The best way is to use the built-in Nette DI container extension in application configuration, usually located in app/config.neon. You can place the imageStore part of the configuration to your local configuration file.

extensions:
    resize: Rostenkowski\Resize\Extension

resize:
    storageDir: %baseDir%/data/images
    cacheDir:   %baseDir%/www/images
    basePath:   /images/

Manual configuration

If you aren't using the the DI extension the image macros should be registered to the Latte engine as described in the docs:

nette:
    latte:
        macros:
            - Rostenkowski\Resize\Macro\ImageMacro::install

The storage can be created manually in presenter or registered as service this way:

services:
    - images: Rostenkowski\ImageStore\ImageStorage("%baseDir%/data/images", "%baseDir%/www/images", "/images/")

Requirements

  • PHP Suggested 5.6, Minimal 5.5
  • Nette Suggested 2.3, Minimal 2.2

The library is tested against PHP 5.5, 5.6 and 7.0 and Nette 2.3 but it should be compatible with previous stable Nette 2.2 and the latest Nette 2.4-dev as well.

For the full list of dependencies see the composer.json file.

API

For the full API documentation navigate to the docs/api/ directory and open index.html file.

Storage

<?php

use Rostenkowski\Resize\Meta;
use Rostenkowski\Resize\File;
use Rostenkowski\Resize\Request;
use Rostenkowski\Resize\ImageStorage;
use Nette\Application\Responses\FileResponse;
use Nette\Http\FileUpload;
use Nette\Utils\Image;

// create storage
$storage = new ImageStorage('/data/images', '/www/images', '/images/');

// add an image from file
$storage->add(File $image, Meta $meta);

// add a HTTP uploaded file
$storage->upload(FileUpload $file, Meta $meta);

// check that an image already exists in the storage
$storage->contains(Meta $meta);

// fetch original
$storage->original(Meta $meta);

// rotate image
$storage->rotate(Meta $meta, 90); // Meta

// downloaded requested thumbnail
$storage->download(Request $request); // Nette\Application\Responses\FileResponse

// fetch requested thumbnail
$storage->fetch(Request $request);

// link requested thumbnail
$storage->link(Request $request);

// output requested thumbnail to stdout
$storage->send(Request $request);

Technical overview

  • The images are stored in regular files in the given directory.
  • The files are organized in a directory tree with maximum of 256² directories in two level structure so with ~1K files in a directory the storage is able to store ~6.5M of images without performance impact.
  • The directory tree is well balanced thanks to image hashes used for the directory path creation.
  • The storage stores only one file even if the same image is stored multiple times.
  • The image thumbnails are created on demand and cached in the cache directory.

Contribution

Feel free to open an Issue or Pull Request.

The source code of the library is fully covered by Nette Tester tests.

To run the test suite simply install the dependencies using composer and then run the bin/run-tests.sh script on linux. On windows u can run in eg. git bash: bin/run-tests-win.sh.

bin/run-tests.sh
 _____ ___  ___ _____ ___  ___
|_   _/ __)( __/_   _/ __)| _ )
  |_| \___ /___) |_| \___ |_|_\  v2.0.x

PHP 5.6.5 (cgi-fcgi) | php-cgi -n -c tests/php.ini | 1 thread

.............

OK (13 tests, 2.7 seconds)

To check the code coverage see the docs/coverage.html file.

Example code

Please see the Usage wiki page.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.