如何设置原始图像的最大宽度?

时间:2012-12-19 作者:Mark

Case:我有一个客户对数字世界知之甚少。然而,她所知道的是如何将照片从相机上传到电脑和WordPress中。然而,她不知道如何将照片缩小到正常大小。

Solution:我喜欢WordPress自动缩小背景中的照片,最大宽度为1024px。

Problem:虽然我可以在设置中设置最大宽度,但我可以设置$content\\u宽度,并且可以使用“add\\u image\\u size”添加新的图像大小。原始照片仍以原始大小存储在上载文件夹中。这意味着硬盘空间很容易被填满。

Question:我应该在函数中输入什么。php让WordPress缩小原始图像的大小(如果大于最大宽度)?

2 个回复
SO网友:Mark

我可以使用以下代码解决它:

function my_handle_upload ( $params )
{
    $filePath = $params[\'file\'];

    if ( (!is_wp_error($params)) && file_exists($filePath) && in_array($params[\'type\'], array(\'image/png\',\'image/gif\',\'image/jpeg\')))
    {
        $quality                        = 90;
        list($largeWidth, $largeHeight) = array( get_option( \'large_size_w\' ), get_option( \'large_size_h\' ) );
        list($oldWidth, $oldHeight)     = getimagesize( $filePath );
        list($newWidth, $newHeight)     = wp_constrain_dimensions( $oldWidth, $oldHeight, $largeWidth, $largeHeight );

        $resizeImageResult = image_resize( $filePath, $newWidth, $newHeight, false, null, null, $quality);

        unlink( $filePath );

        if ( !is_wp_error( $resizeImageResult ) )
        {
            $newFilePath = $resizeImageResult;
            rename( $newFilePath, $filePath );
        }
        else
        {
            $params = wp_handle_upload_error
            (
                $filePath,
                $resizeImageResult->get_error_message() 
            );
        }
    }

    return $params;
}
add_filter( \'wp_handle_upload\', \'my_handle_upload\' );
原始文件上载后为3,3Mb,大尺寸设置为2048x2048,服务器上仅需375Kb(约减少90%)

SO网友:Tom J Nowell

调整大小已经完成,以创建大/中/拇指大小,但您面临的问题是图像太大,无法调整大小,这可能是因为内存不足或时间不足。

因此,调整大小不是一个选项,如果不是,你就不会有问题。相反,请尝试限制图像,这样,如果发生20MB的上载,它将被拒绝,并显示一条消息,指示需要缩小大小。

基于图像面积/百万像素的限制:

<?php
/**
 * Plugin Name: Deny Giant Image Uploads
 * Description: Prevents Uploads of images greater than 3.2MP
 */

function tomjn_deny_giant_images($file){
    $type = explode(\'/\',$file[\'type\']);

    if($type[0] == \'image\'){
        list( $width, $height, $imagetype, $hwstring, $mime, $rgb_r_cmyk, $bit ) = getimagesize( $file[\'tmp_name\'] );
        if($width * $height > 3200728){ // I added 100,000 as sometimes there are more rows/columns than visible pixels depending on the format
            $file[\'error\'] = \'This image is too large, resize it prior to uploading, ideally below 3.2MP or 2048x1536\';
        }
    }
    return $file;
}
add_filter(\'wp_handle_upload_prefilter\',\'tomjn_deny_giant_images\');
基于宽度或高度的限制:

https://wordpress.stackexchange.com/posts/67110/revisions

<?php
/** Plugin Name: (#67107) »kaiser« Restrict file upload */

function wpse67107_restrict_upload( $file )
{
    $file_data = getimagesize( $file );
    // Handle cases where we can\'t get any info:
    if ( ! $file_data )
        return $file;

    list( $width, $height, $type, $hwstring, $mime, $rgb_r_cmyk, $bit ) = $file_data;

    // Add conditions when to abort
    if ( $width > 2048 )
        $file[\'error\'] = \'Error statement\';

    return $file;
}
add_filter( \'wp_handle_upload_prefilter\', \'wpse67107_restrict_upload\' );
按面积限制将允许调整大小的高/薄或宽/短图像,按尺寸限制可能更容易解释

结束