承接 itscript/countdown-gif 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

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

itscript/countdown-gif

Composer 安装命令:

composer require itscript/countdown-gif

包简介

Countdown gif generator

README 文档

README

Flexible countdown builder, supports svg templating

Installation

You can install directly via Composer:

$ composer require "itscript/countdown-gif":"^1.0"

Simple usage

<?php

require 'vendor/autoload.php'

$template = <<<XML
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" width="400" height="100" viewBox="0 0 400 100">
    <defs>
        <style>
            .cls-1 {
                font-size: 62.5px;
                text-anchor: middle;
                font-weight: 900;
            }
        </style>
    </defs>
    <text id="h1" class="cls-1" x="25" y="72"><tspan x="25">{h1}</tspan></text>
    <text id="h2" class="cls-1" x="75" y="72"><tspan x="75">{h2}</tspan></text>
    <text id=":1" class="cls-1" x="124" y="66"><tspan x="124">:</tspan></text>
    <text id="m1" class="cls-1" x="175" y="72"><tspan x="175">{m1}</tspan></text>
    <text id="m2" class="cls-1" x="225" y="71"><tspan x="225">{m2}</tspan></text>
    <text id=":2" class="cls-1" x="275" y="66"><tspan x="275">:</tspan></text>
    <text id="s1" class="cls-1" x="325" y="72"><tspan x="325">{s1}</tspan></text>
    <text id="s2" class="cls-1" x="375" y="71"><tspan x="375">{s2}</tspan></text>
</svg>
XML;

$now = new \DateTimeImmutable();
$end = $now->add(new \DateInterval('PT45296S'));

$sequence = new \ITS\Countdown\GIF\FrameSequenceBuilder\DateTimeFrameSequenceBuilder($template, $now, $end);

$middleware = new \ITS\Countdown\GIF\FrameMiddleware\CompositeFrameMiddleware(
    new \ITS\Countdown\GIF\FrameMiddleware\InjectVariableFrameMiddleware(),
    new \ITS\Countdown\GIF\FrameMiddleware\SvgToGifFrameMiddleware()
);

$sequence = new \ITS\Countdown\GIF\FrameSequenceBuilder\MiddlewareFrameSequenceBuilder($sequence->getSequence(), $middleware);
$handler = new \ITS\Countdown\GIF\FrameSequenceHandler\SaveFrameSequenceHandler();

header("Content-Type: image/gif");
$handler->process($sequence->getSequence());

Caching

For optimization you can use cache for each frame. Just add caching middleware, as below

<?php

$middleware = new \ITS\Countdown\GIF\FrameMiddleware\CompositeFrameMiddleware(/* ... */);

/** @var \Psr\SimpleCache\CacheInterface $cache */
$cache;

$middleware
    ->add(
        new \ITS\Countdown\GIF\FrameMiddleware\CallbackFrameMiddleware(function (\ITS\Countdown\GIF\Frame $frame, $next) use ($cache) {
            $content = $cache->get(number_format($frame->getInterval()));
            if ($content) { // exit if cache exists
                return new \ITS\Countdown\GIF\Frame\FrameInstance($content, $frame->getInterval(), $frame->getDuration());
            } elseif (is_callable($next)) {
                return $next($frame);
            } else {
                return $frame;
            }
        }),
        2 // beginning
    )
    ->add(
        new \ITS\Countdown\GIF\FrameMiddleware\CallbackFrameMiddleware(function (\ITS\Countdown\GIF\Frame $frame, $next) use ($cache) {
            $cache->set(number_format($frame->getInterval()), $frame->getContent(), 60);

            if (is_callable($next)) {
                return $next($frame);
            } else {
                return $frame;
            }
        }),
        0 // end
    );

Interfaces

<?php

namespace ITS\Countdown\GIF;

interface Frame
{
    /**
     * @return string
     */
    public function getContent();

    /**
     * @return float
     */
    public function getInterval();

    /**
     * @return float
     */
    public function getDuration();
}

interface FrameMiddleware
{
    /**
     * @param Frame         $frame
     * @param callable|null $next
     * @return Frame
     */
    public function __invoke(Frame $frame, callable $next = null);
}

interface FrameSequenceBuilder
{
    /**
     * @return \Iterator|Frame[]
     */
    public function getSequence();
}

interface FrameSequenceHandler
{
    /**
     * @param \Iterator|Frame[] $sequence
     */
    public function process(\Iterator $sequence);
}

itscript/countdown-gif 适用场景与选型建议

itscript/countdown-gif 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 104 次下载、GitHub Stars 达 1, 最近一次更新时间为 2017 年 09 月 01 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「gif」 「svg」 「countdown」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

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

围绕 itscript/countdown-gif 我们能提供哪些服务?
定制开发 / 二次开发

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

BUG 修复 & 性能优化

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

项目外包 & 长期维护

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

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

统计信息

  • 总下载量: 104
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 2
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 2
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2017-09-01