zoukankan      html  css  js  c++  java
  • 将图像像素转换到较低

    想用shell脚本实现对一个文件夹里所有的图片的像素转换

    这里错误的几个地方:

    1.定义变量时,变量名不加美元符号($),如:

      variableName="value"  (字符串的定义)

    注意,变量名和等号之间不能有空格,这可能和你熟悉的所有编程语言都不一样。同时,变量名的命名须遵循如下规则:

    • 首个字符必须为字母(a-z,A-Z)。
    • 中间不能有空格,可以使用下划线(_)。
    • 不能使用标点符号。
    • 不能使用bash里的关键字(可用help命令查看保留关键字)。

    2.使用一个定义过的变量,只要在变量名前面加美元符号($)即可,如:

    1. your_name="mozhiyan"
    2. echo $your_name
    3. echo ${your_name}

    变量名外面的花括号是可选的,加不加都行,加花括号是为了帮助解释器识别变量的边界,比如下面这种情况:

    1. for skill in Ada Coffe Action Java
    2. do
    3. echo "I am good at ${skill}Script"
    4. done

    如果不给skill变量加花括号,写成echo "I am good at $skillScript",解释器就会把$skillScript当成一个变量(其值为空),代码执行结果就不是我们期望的样子了。推荐给所有变量加上花括号,这是个好的编程习惯。

    3.变量运算:

    s=0                                    #定义一个求和变量,初值为0。

    t=`expr$1**$2`                        #用expr改变运算顺序,求x的y次方。

    t=$[t*3]                               #t乘以3。

    s=$[s+t]                               #结果相加。

    t=$[$1**2]                             #求x的平方。

    t=$[t*4]                               #结果乘以4。

    s=$[s+t]                               #结果相加。

    t=`expr$2*5`                          #求5y的值。

    s=$[s+t]                               #结果相加。

    s=$[s+6]                               #结果加上6。

    echo$s                                #输出结果。

    echo$((a%b))                          #取余

    正确代码:

    #!/bin/bash
    
    #mkdir detection-crowdai_new
    
    count=0
    for image in $(ls detection-crowdai)
    do
        count=$[count+1]
        echo "Hello World !"
      echo $image
    #convert -resize 800x500 image image done echo $count

    $(ls detection-crowdai)相当于一个变量了,实现了对文件夹里所有文件的访问。echo $image能显示文件夹下所有的文件名

    detection-crowdai是在~下的,因为这个shell脚本就在~目录下,所以不要加绝对路径:/home/bnrc/detection-crowdai,也不要写成/detection-crowdai,这样都会报错说找不到文件。

    最后正确运行的代码,这个代码还实现了图片名字没改变,只是像素大小变化了存储在另一个文件夹:

    #!/bin/bash
    
    #mkdir detection-crowdai_new
    
    
    for image in $(ls detection-crowdai)
    do
        dir="/home/bnrc/detection-crowdai/"
        path=$dir${image}
        echo $path
        # convert -resize 800x500 $path $abc
        #mat=".jpg"
        #newname=$image$mat
        newname=$image
        convert -resize 800x500 $path $newname
        #mv $newname /home/bnrc/detection-crowdai_new
        target='/home/bnrc/detection-crowdai_new'
        mv $newname $target
    done

    1.生成的图片我想用shell的重定向,但显然这是不可以的。重定向是从终端将终端上显示的东西输入到文件或者其他地方。

       实际上使用mv将每次生成的图片转移到另一个文件夹就可以了。

    2.字符串的连接,我这里使用了将两个字符串变量直接连接path=$dir${image},也可以直接写成path=$dir$image。这个可以很好地用到添加路径上。

    3.convert这个命令:如果图片放到当前目录,直接convert+文件名就好了。如果图片在当前路径的某个文件夹里,你用/detection-crowdai+文件名,他会说找不到图片。你只能使用绝对路径/home/bnrc/detection-crowdai/才行。

    4.mv $newname /home/bnrc/detection-crowdai_new会一直报错,/home/bnrc/detection-crowdai_new不是一个字符串,shell会认为这个一个变量,但这个变量又没有定义,当然会报错。

    shell跟字符串有很多关系,毕竟你在终端输入的命令都是以字符串形式输入的。

  • 相关阅读:
    自定义View的ToolBar布局报错Error:(2) No resource identifier found for attribute 'context' in package 'c
    在学git之主分支 branch
    获取发布版SHA1
    关于开启线程与UI的操作
    播放音频和视频(VideoView控件)
    通知栏Notification的应用
    Android 真机调式 Installation failed with message 远程主机强迫关闭了一个现有的连接。. It is possible that this issue is resolved by uninstalling an existing version of the apk if it is present, and then re-installing. WA
    运行程序申请危险权限
    mysql乐观锁总结和实践
    Nginx配置文件nginx.conf中文详解
  • 原文地址:https://www.cnblogs.com/ymjyqsx/p/6974043.html
Copyright © 2011-2022 走看看