1

我已经设法让 Filepond 上传文件,将它们放在正确的文件夹中,并将必要的详细信息添加到 mysql 数据库中。但是,由于原始图像的分辨率非常高,我需要制作缩略图。应该放在称为“缩略图”的子文件夹中的较小版本的图像。

我使用的是 PHP 样板,一些文档没有涵盖那里使用的方法。例如,我只是为了测试而尝试这样做:

    FilePond.setOptions({
        maxFileSize: '25MB',
        instantUpload: true,
        server: 'api/',
        imageTransformVariants: {
            'thumb_medium_': transforms => {
                transforms.resize.size.width = 384;
                return transforms;
            },
            'thumb_small_': transforms => {
                transforms.resize.size.width = 128;
                return transforms;
            }
        }

    });
    let pond = FilePond.create(document.querySelector('input[type="file"]'));

这给了我这个错误:

index.php?id=1383:67 Uncaught (in promise) TypeError: Cannot read property 'size' of undefined
    at thumb_medium_ (index.php?id=1383:67)
    at filepond-plugin-image-transform.js:898
    at filepond-plugin-image-transform.js:987
    at new Promise (<anonymous>)
    at filepond-plugin-image-transform.js:986
    at filepond-plugin-image-transform.js:1066
    at Array.map (<anonymous>)
    at filepond-plugin-image-transform.js:1065
    at new Promise (<anonymous>)
    at filepond-plugin-image-transform.js:941

显然,我可以为缩略图制作第二个 Filepond-upload,但我怀疑应该有一种方法可以自动执行此操作。如何使变体起作用,以及如何使它们在不同的文件夹和相同的文件名中,而不是给它们一个前缀?

4

1 回答 1

0

您在使用多卡吗?我认为 Doka 允许您设置转换客户端,然后服务器将执行它们 - 尽管我不确定。另一种选择是编写一个简单的 php 脚本来为您进行压缩,因为您只想上传一张图片。

如果你想自己做这件事,也许像下面这样来压缩服务器上的图像?


function compressImage($source, $destination, $newWidth = 384) {

    // get image & details
    $info = getimagesize($source);
    $width = $info[0];
    $height = $info[1];
    $ratio = $width / $height;
    // calculate new heights
    $newHeight = $newWidth / $ratio;
    // create temp blank image
    $compressedImg = imagecreatetruecolor($newWidth, $newHeight);

    if ($info['mime'] == 'image/jpeg') {
        $image = imagecreatefromjpeg($source);
        imagecopyresampled($compressedImg, $image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
        // adjust quality if needed
        imagejpeg($compressedImg, $destination, 75);
        return true;
    } elseif ($info['mime'] == 'image/png') {
        $image = imagecreatefrompng($source);
        imagecopyresampled($compressedImg, $image, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
        // adjust compression if needed (0 not compressed, 9 highest compression)
        imagepng($compressedImg, $destination, 9);
        return true;
    }
    return false;
}

compressImage('/path/to/image/filename.jpg', '/path/to/image/thumbnails/filename.jpg');

免责声明 - 我没有测试过这段代码

于 2019-05-01T12:48:11.250 回答