Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Perisian tengah CakePHP: grafik bersepadu dan perpustakaan pemprosesan imej untuk mencapai operasi imej yang kaya

Perisian tengah CakePHP: grafik bersepadu dan perpustakaan pemprosesan imej untuk mencapai operasi imej yang kaya

WBOY
WBOYasal
2023-07-28 13:45:15904semak imbas

Perisian tengah CakePHP: Mengintegrasikan grafik dan perpustakaan pemprosesan imej untuk mencapai operasi imej yang kaya

Pengenalan:
Apabila membangunkan aplikasi web, ia selalunya perlu untuk memproses imej, seperti penskalaan, pemangkasan, menambah tera air, dsb. CakePHP, sebagai rangka kerja PHP yang popular, menyediakan fungsi yang kaya dan kebolehlanjutan, dan fungsi middleware sangat berkuasa. Artikel ini akan memperkenalkan cara menggunakan perisian tengah CakePHP untuk menyepadukan grafik dan perpustakaan pemprosesan imej untuk mencapai operasi imej yang kaya, dan disertakan dengan contoh kod.

1. Pasang dan konfigurasikan perisian tengah:
Sebelum bermula, anda perlu memastikan bahawa rangka kerja CakePHP telah dipasang. Ia boleh dipasang melalui Komposer Perintah khusus adalah seperti berikut:

composer create-project --prefer-dist cakephp/app

Selepas pemasangan selesai, anda perlu mengkonfigurasi perisian tengah. Buka fail config/middleware.php dan cari kod berikut:

// Prioritize your own middleware by adding it BEFORE the default ones.
//$middlewareQueue->add(new CakeHttpMiddlewareBodyParserMiddleware());
//$middlewareQueue->add(new CakeRoutingMiddlewareAssetMiddleware());
//$middlewareQueue->add(new CakeRoutingMiddlewareRoutingMiddleware());

Di sini, kami boleh menambah middleware tersuai. Seterusnya, kami akan membincangkan cara melaksanakan perisian tengah.

2. Cipta perisian tengah:
Pertama, kita perlu mencipta kelas perisian tengah. Cipta fail baharu ImgProcessMiddleware.php dalam direktori src/Middleware Kodnya adalah seperti berikut:

<?php
namespace AppMiddleware;
use CakeHttpServerRequest;
use CakeHttpResponse;
use CakeHttpExceptionNotFoundException;
class ImgProcessMiddleware
{
    public function __invoke(ServerRequest $request, Response $response, $next)
    {
        // 检查请求是否是图片操作请求
        if ($request->getParam('action') === 'processImage') {
            // 获取要处理的图片路径
            $imagePath = $request->getQuery('image_path');
            // 处理图片
            $processedImage = $this->processImage($imagePath);
            // 将处理后的图片响应给客户端
            $response = $response->withType('image/jpeg')
                                 ->withStringBody($processedImage);
            return $response;
        }
        // 请求不是图片操作请求,继续下一个中间件
        return $next($request, $response);
    }
    private function processImage($imagePath)
    {
        // 图片处理的具体逻辑
        // 这里使用的是Imagine库,你也可以选择其他图形和图像处理库
        $imagine = new ImagineGdImagine();
        $image = $imagine->open($imagePath);
        $image->resize(new ImagineImageBox(100, 100))
              ->save($imagePath);
        return $image->get('jpeg');
    }
}

Dalam kod di atas, kami mencipta kelas middleware ImgProcessMiddleware. Dalam kaedah __invoke, kami menyemak sama ada operasi yang diminta ialah processImage Jika ya, dapatkan laluan imej untuk diproses dan panggil kaedah processImage untuk pemprosesan imej. Selepas pemprosesan selesai, imej yang diproses dikembalikan kepada klien sebagai badan tindak balas.

3. Daftar middleware:
Seterusnya, kita perlu mendaftar middleware ke dalam aplikasi. Buka fail config/middleware.php dan cari kod berikut:

// Uncomment the following line if you want to check HTTP methods + content types
// against the declared route types
//$middlewareQueue->add(new RoutingMiddleware($this));

Di sini kita boleh menambah middleware pada jenis laluan yang ditentukan (jika perlu). Tambahkan kod berikut selepas kod:

// 添加自定义的中间件到中间件队列
$middlewareQueue->add(new AppMiddlewareImgProcessMiddleware());

Selepas menambahnya, simpan fail. Kini, kami telah berjaya mendaftarkan perisian tengah ke dalam aplikasi.

4 Uji perisian tengah:
Melalui langkah di atas, kami telah berjaya menyepadukan perpustakaan pemprosesan imej dan grafik. Sekarang kita boleh menguji perisian tengah dengan mencipta laluan dan pengawal yang mudah. Cipta fail baharu ImagesController.php dalam direktori src/Controller dengan kod berikut:

<?php
namespace AppController;
use CakeControllerController;
class ImagesController extends Controller
{
    public function view()
    {
        // 显示原始图片
        $this->viewBuilder()->setLayout(false);
    }
    public function process()
    {
        // 处理图片
        $this->viewBuilder()->setLayout(false);
    }
}

Dalam kod di atas, kami mencipta dua tindakan mudah: lihat dan proses. Tindakan paparan digunakan untuk memaparkan imej asal, dan tindakan proses digunakan untuk memproses imej.

Seterusnya, kita perlu mencipta fail paparan yang sepadan. Cipta dua fail baharu dalam direktori src/Template/Images: view.ctp dan process.ctp. Lulus laluan imej yang diperlukan kepada dua fail paparan, dan kemudian paparkan imej asal dalam fail view.ctp dan imej yang diproses dalam fail process.ctp.

Akhir sekali, kita perlu membuat laluan dan mengaitkan tindakan dengan pandangan. Tambahkan kod berikut dalam fail config/routes.php:

use CakeRoutingRouteBuilder;
use CakeRoutingRouter;
// 添加自定义路由
Router::scope('/', function (RouteBuilder $routes) {
    $routes->connect('/images/view', ['controller' => 'Images', 'action' => 'view']);
    $routes->connect('/images/process', ['controller' => 'Images', 'action' => 'process']);
});

Simpan dan tutup fail.

Kini, mengakses /images/view akan memaparkan imej asal, dan mengakses /images/process akan memproses dan memaparkan imej yang diproses.

Kesimpulan:
Melalui pengenalan artikel ini, kami telah mempelajari cara menggunakan perisian tengah CakePHP untuk mengintegrasikan grafik dan perpustakaan pemprosesan imej untuk mencapai operasi imej yang kaya. Middleware memainkan peranan penting dalam CakePHP, menyediakan pembangun cara yang lebih fleksibel dan cekap untuk mengendalikan permintaan dan respons.

Contoh kod: [ImgProcessMiddleware.php]

<?php
namespace AppMiddleware;
use CakeHttpServerRequest;
use CakeHttpResponse;
use CakeHttpExceptionNotFoundException;
class ImgProcessMiddleware
{
    public function __invoke(ServerRequest $request, Response $response, $next)
    {
        // 检查请求是否是图片操作请求
        if ($request->getParam('action') === 'processImage') {
            // 获取要处理的图片路径
            $imagePath = $request->getQuery('image_path');
            // 处理图片
            $processedImage = $this->processImage($imagePath);
            // 将处理后的图片响应给客户端
            $response = $response->withType('image/jpeg')
                                 ->withStringBody($processedImage);
            return $response;
        }
        // 请求不是图片操作请求,继续下一个中间件
        return $next($request, $response);
    }
    private function processImage($imagePath)
    {
        // 图片处理的具体逻辑
        // 这里使用的是Imagine库,你也可以选择其他图形和图像处理库
        $imagine = new ImagineGdImagine();
        $image = $imagine->open($imagePath);
        $image->resize(new ImagineImageBox(100, 100))
              ->save($imagePath);
        return $image->get('jpeg');
    }
}

Nota: Pustaka Imagine dalam kod contoh boleh dipasang melalui Composer Perintah khusus adalah seperti berikut:

composer require imagine/imagine

Kemudian, tambahkan kod berikut pada fail middleware (ImgProcessMiddleware. .php). Petikan:

use ImagineGdImagine;
use ImagineImageBox;

Melalui langkah di atas, kami boleh menyepadukan perpustakaan pemprosesan imej dan grafik dengan cepat ke dalam aplikasi CakePHP untuk mencapai operasi imej yang kaya. Ini akan menyediakan ciri yang lebih fleksibel dan cekap untuk projek kami. Saya harap artikel ini akan membantu semua orang yang menghadapi masalah pemprosesan imej semasa pembangunan.

Atas ialah kandungan terperinci Perisian tengah CakePHP: grafik bersepadu dan perpustakaan pemprosesan imej untuk mencapai operasi imej yang kaya. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn