splitbrain/slika 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

splitbrain/slika

Composer 安装命令:

composer require splitbrain/slika

包简介

Simple image resizing

README 文档

README

This is a library that covers only the bare basics you need when handling images:

  • resizing
  • cropping
  • rotation

It can use either PHP's libGD or a locally installed ImageMagick binary.

Installation

Use composer

composer require splitbrain/slika

Usage

Simply get an Adapter from the Slika factory, run some operations on it and call save.

Operations can be chained together. Consider the chain to be one command. Do not reuse the adapter returned by run(), it is a single use object. All operations can potentially throw a \splitbrain\slika\Exception.

Options (see below) can be passed as a second parameter to the run factory.

use \splitbrain\slika\Slika;
use \splitbrain\slika\Exception;

$options = [
    'quality' => 75
];

try {
    Slika::run('input.png', $options)
        ->resize(500,500)
        ->rotate(Slika::ROTATE_CCW
        ->save('output.jpg', 'jpg');
} catch (Exception $e) {
    // conversion went wrong, handle it
}

Please also check the API Docs for details.

Operations

resize

All resize operations will keep the original aspect ratio of the image. There will be no distortion.

Keeping either width or height at zero will auto calculate the other value for you.

# fit the image into a bounding box of 500x500 pixels
Slika::run('input.jpg')->resize(500,500)->save('output.png', 'png');

# adjust the image to a maximum width of 500 pixels 
Slika::run('input.jpg')->resize(500,0)->save('output.png', 'png');

# adjust the image to a maximum height of 500 pixels 
Slika::run('input.jpg')->resize(0,500)->save('output.png', 'png');

By default, images smaller than the given dimensions are enlarged. That is not always desirable because the quality will suffer. Pass false as the third parameter to disable upscaling. The image is then never grown beyond its original size (it is returned unchanged when it already fits into the bounding box).

# fit into 500x500 but never enlarge a smaller image
Slika::run('input.jpg')->resize(500,500,false)->save('output.png', 'png');

crop

Similar to resizing, but this time the image will be cropped to fit the new aspect ratio.

Slika::run('input.jpg')->crop(500,500)->save('output.png', 'png');

Cropping also accepts the $upscale parameter. When set to false an image that is smaller than the requested crop area is never enlarged: dimensions larger than the image are cropped, smaller ones are left untouched, and an image that fits entirely into the area is returned as is. This means that the output image may be smaller than the requested crop area and might have a different aspect ratio than requested.

# crop to 500x500 but never enlarge a smaller image
Slika::run('input.jpg')->crop(500,500,false)->save('output.png', 'png');

rotate

Rotates the image. The parameter passed is one of the EXIF orientation flags:

orientation flags

For your convenience there are three Constants defined:

  • Slika::ROTATE_CCW counter clockwise rotation
  • Slika::ROTATE_CW clockwise rotation
  • Slika::ROTATE_TOPDOWN full 180 degree rotation
Slika::run('input.jpg')->rotate(Slika::ROTATE_CW)->save('output.png', 'png');

autorotate

Rotates the image according to the EXIF rotation tag if found.

Slika::run('input.jpg')->autorotate()->save('output.png', 'png');

Inspecting images without processing them

Sometimes you need to know what dimensions an image would have after a chain of operations without actually decoding pixels or calling ImageMagick — for example, to emit <img width="…" height="…"> attributes on a page that references a resize URL.

\splitbrain\slika\ImageInfo mirrors the Adapter's fluent API at the dimension level. It reads only getimagesize() and the EXIF orientation tag, never touching the pixel data.

use \splitbrain\slika\ImageInfo;

$info = new ImageInfo('input.jpg');

// on-disk state (stable regardless of chain operations)
$info->getRawWidth();       // e.g. 4000
$info->getRawHeight();      // e.g. 3000
$info->getExtension();      // 'jpeg'
$info->getOrientation();    // EXIF orientation 1..8

// the fluent chain simulates autorotate/rotate/resize/crop
// and returns the final tracked dimensions
list($w, $h) = (new ImageInfo('input.jpg'))
    ->autorotate()
    ->resize(500, 500)
    ->getDimensions();

This lets you predict the output of Slika::run(...)->autorotate()->resize(500,500) without doing any actual image work.

Options

Options can be passed as associatiave array as the second parameter in Slika::run.

The following options are availble currently:

Option Default Description
imconvert /usr/bin/convert The path to ImageMagick's convert binary
quality 92 The quality when writing JPEG images

splitbrain/slika 适用场景与选型建议

splitbrain/slika 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 1.94k 次下载、GitHub Stars 达 5, 最近一次更新时间为 2020 年 05 月 01 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 splitbrain/slika 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 splitbrain/slika 我们能提供哪些服务?
定制开发 / 二次开发

基于 splitbrain/slika 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 1.94k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 5
  • 点击次数: 13
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 5
  • Watchers: 1
  • Forks: 3
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2020-05-01