为samba开放特定端口

firewall-cmd --zone=public --add-port=139/tcp --permanent
firewall-cmd --zone=public --add-port=445/tcp --permanent
firewall-cmd --zone=public --add-port=137/udp --permanent
firewall-cmd --zone=public --add-port=138/udp --permanent
 
firewall-cmd --reload
systemctl restart firewalld.service

注:samba开发tcp/139,445端口,udp/137,138端口。

如果在内网中使用samba服务,建议直接关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

文章来源:https://blog.csdn.net/revitalizing/article/details/55505853

必要工具库
一、libgd的安装
export LD_LIBRARY_PATH=/Path/to/libgd.so:$LD_LIBRARY_PATH
当然也还有更简单的方法,直接yum安装也行,自己配置好yum源,然后:
yum install gd-devel pcre-devel libcurl-devel
因为libcurl也是需要的一部分,所以一起安装。

二、nginx with-http_image_filter_module模块安装
编辑安装nginx的时候需要加上这些参数
--with-http_image_filter_module --with-pcre=../pcre-8.36

使用:
一般情况下,nginx一般都需要用到正则表达式,所以对于图片处理器pcre就更不能少了,如果有pcre,我们的配置就可以写成下面这样:

    #图片处理,固定返回最大长边尺寸
    location ~* /(.+)\.(jpg|gif|png)$ {
        access_log   off;
        expires      30d;
#根据给定的长宽生成缩略图
        image_filter resize 800 800;
#原图最大2M,要裁剪的图片超过2M返回415错误,需要调节参数image_filter_buffer 
        image_filter_buffer 8M;  
        image_filter_interlace on;
        image_filter_jpeg_quality 95;
        image_filter_sharpen 100;
        image_filter_transparency on;
#error_page  415      /images/notfound.jpg;
        try_files /$1.$2  /notfound.jpg; 
    }

    #图片处理,支持_1x1.jpg这样的自定义尺寸
    location ~* /(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ {
        access_log   off;
        expires      30d;
        set $w $2;
        set $h $3;
        if ($h = "0") {
            rewrite /(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ /$1 last;
        }
        if ($w = "0") {
            rewrite /(.+)_(\d+)x(\d+)\.(jpg|gif|png)$ /$1 last;
        }
        #根据给定的长宽生成缩略图
        image_filter resize $w $h;
        #原图最大2M,要裁剪的图片超过2M返回415错误,需要调节参数image_filter_buffer 
        image_filter_buffer 8M;  
        image_filter_interlace on;
        image_filter_jpeg_quality 95;
        image_filter_sharpen 100;
        image_filter_transparency on;
        #error_page  415      /images/notfound.jpg;
        try_files /$1  /notfound.jpg; 
    }

访问处理后的图片:
http://xxxx.xxx.xxx/test.jpg >> http://xxxx.xxx.xxx/test.jpg_500x200.jpg

各参数的注释:

image_filter off;
#关闭模块

image_filter test;
#确保图片是jpeg gif png否则返415错误

image_filter size;
#输出有关图像的json格式:如下显示{ "img" : { "width": 100, "height": 100, "type": "gif" } } 出错显示:{}

image_filter rotate 90|180|270;
#旋转指定度数的图像,参数可以包括变量,单独或一起与resize crop一起使用。

image_filter resize width height;
#按比例减少图像到指定大小,公减少一个可以另一个用"-"来表示,出错415,参数值可包含变量,可以与rotate一起使用,则两个一起生效。

image_filter crop width height;
#按比例减少图像比较大的侧面积和另一侧多余的载翦边缘,其它和rotate一样。没太理解

image_filter_buffer 10M;
#设置读取图像缓冲的最大大小,超过则415错误。

image_filter_interlace on;
#如果启用,最终的图像将被交错。对于JPEG,最终的图像将在“渐进式JPEG”格式。

image_filter_jpeg_quality 95;
#设置变换的JPEG图像的期望质量。可接受的值是从1到100的范围内。较小的值通常意味着既降低图像质量,减少传输数据,推荐的最大值为95。参数值可以包含变量。

image_filter_sharpen 100;
#增加了最终图像的清晰度。锐度百分比可以超过100。零值将禁用锐化。参数值可以包含变量。

image_filter_transparency on;
#定义是否应该透明转换的GIF图像或PNG图像与调色板中指定的颜色时,可以保留。透明度的损失将导致更好的图像质量。在PNG的Alpha通道总是保留透明度。

Nginx图片处理的优缺点

优点
操作简单。通过简单配置,省去了后端裁剪程序的复杂性。
实时裁剪。可以实时访问在线裁剪图片。
灵活性强。后端程序裁剪图片时需要知道裁剪图片的尺寸和质量,使用nginx裁剪可以实时裁剪任意尺寸的图片。
不占用硬盘空间。

缺点
消耗CPU和内存,访问量大的时候就会给服务器带来很大的负担。(可以通过使用Nginx缓存和缓存服务器来解决)

功能不是很强大,支持的处理图片类型只包括JPEG, GIF, PNG, or WebP

PC:宝塔用户nginx是安装了以上模块的,所以可以直接增加配置代码就可以使用了

效果:
1558506586(1).jpg
cicle.wpy

<style lang="less">

    .cicle {
        position: relative;
        width: 88px;
        height: 88px;
        margin: 0 auto;
        border-width: 6px;
        border-color: #ccc;
        border-style: solid;
        border-radius: 50%;
    }

    .cicle view,.cicle{
        box-sizing:content-box;
        -webkit-box-sizing:content-box;
        -moz-box-sizing: content-box;
    }

    .cicle .bar {
        position: absolute;
        width: 50px;
        height: 100px;
        overflow: hidden;
    }

    .cicle .bar-left {
        top: -6px;
        left: -6px;
    }

    .cicle .bar-an {
        position: absolute;
        width: 88px;
        height: 88px;
        border-width:6px;
        border-style: solid;
        border-radius: 50%;
        transform: rotate(-135deg);
    }

    .cicle .bar-left .bar-left-an {
        z-index: 10;
        border-color: transparent transparent #20a53a #20a53a;
        transition: transform 300ms linear;
    }

    .cicle .bar-right {
        top: -6px;
        left: 44px;
    }

    .cicle .bar-right .bar-right-an {
        left: -50px;
        z-index: 20;
        border-color: #20a53a #20a53a transparent transparent;
        transition: transform 300ms linear;
    }

    .cicle .occupy {
        position: absolute;
        width: 88px;
        height: 88px;
        line-height: 88px;
        text-align: center;
        font-size: 18px;
        color: #20a53a;
    }
</style>
<template>
    <view class="cicle mem-release" style="{{style}}">
        <view class="bar bar-left">
            <view class="bar-left-an bar-an" style="{{'transform: rotate('+leftRate+'deg);'+barleftan}}"></view>
        </view>
        <view class="bar bar-right">
            <view class="bar-right-an bar-an" style="{{'transform: rotate('+rightRate+'deg);'+barrightan}}"></view>
        </view>
        <view class="occupy" style="{{occupyStyle}}">{{text}}</view>
        <view class="mem-re-min"></view>
        <view class="mem-re-con" title="$data['lan']['P3']"></view>
    </view>
</template>
<script>
    import wepy from 'wepy'

    export default class Cicle extends wepy.component {

        props = {
            max    : {
                type   : Number,
                default: 100,
            },
            current: {
                type   : Number,
                default: 0,
            },
            text   : {
                type   : String,
                default: '',
            },
            color: {
                type: String,
                default: '#20a53a'
            },
            style: {
                type: String,
                default: ''
            }
        };

        data = {
            barleftan: '',
            barrightan: '',
            occupyStyle:'',
            leftRate: -135, //-135 - 45
            rightRate: -135, //-135 - 45
        };

        onLoad(){
            const {color} = this;
            this.barleftan = `border-color: transparent transparent ${color} ${color};`;
            this.barrightan = `border-color: ${color} ${color} transparent transparent;`;
            this.occupyStyle = `color: ${color};`;
            this.$apply();
        }

        watch={
            current(n,o){
                const {max} = this;
                let rate = n / max;
                if (rate < 0.5) {
                    this.rightRate = -135 + (360 * rate);
                    this.leftRate = -135;
                } else {
                    this.rightRate = 45;
                    this.leftRate = -135 + (360 * (rate - 0.5));
                }
            }
        };

    }
</script>