Java图片编辑工具thumbnailator

对图片的编辑是一个常见的编程需求,比如缩小图片、加水印等等,而thumbnailator就是一个非常好用的开源图片编辑Java类库,

https://github.com/coobird/thumbnailator

本文将对此工具进行介绍并给出代码样例。

1. 项目引入thumbnailator类库

以Maven项目为例,可以按如下配置添加thumbnailator依赖类库,

 <dependency>
 <groupId>net.coobird</groupId>
 <artifactId>thumbnailator</artifactId>
 <version>0.4.8</version>
 </dependency>

2. 获取缩略图

获取缩略图有两种方式,一个是指定缩放后的图片尺寸,还有一个指定图片缩放比例。

指定缩放尺寸到宽150+高100,

Thumbnails.of(new File("bird.jpg")).size(150, 100).toFile(new File("thumbnail.jpg"));

指定缩放比例为四分之一,

BufferedImage img = ImageIO.read(new File("bird.jpg"));
BufferedImage thumbnail = Thumbnails.of(img).scale(0.25).asBufferedImage();
ImageIO.write(thumbnail, "jpg", new File("bird_scaled_25.jpg"));

图片缩放的效果图,

thumbnail

3. 旋转图片指定角度

对图片分别旋转0、90、180、270、45度,

for (int i : new int[] {0, 90, 180, 270, 45}) {
 Thumbnails.of("bird.jpg")
  .size(100, 100)
  .rotate(i)
  .toFile(new File("bird_rotated_" + i + ".jpg"));
 }

rotate

4. 添加水印

添加一个水印,并且设置水印透明度为30%,

Thumbnails.of("bird.jpg")
 .scale(1)
 .watermark(Positions.BOTTOM_RIGHT, ImageIO.read(watermarkFile), 0.3f)
 .outputQuality(0.8)
 .toFile(new File("bird_with_watermark.jpg"));

图片添加水印的效果图,

watermark

5. 更改图片格式

读取JPEG格式图片,然后输出PNG格式图片,

OutputStream outPng = new FileOutputStream(resDir + "output.png");
Thumbnails.of("bird.jpg")
 .scale(1)
 .outputFormat("png")
 .toOutputStream(outPng);
 outPng.close();

6. 批量处理图片

Thumbnailnator可以同时指定多个图片文件,批量进行处理,

Thumbnails.of("bird.jpg", "bird2.jpg", "bird3.jpg")
 .scale(1)
 .toFiles(new File(outDirectory), Rename.PREFIX_DOT_THUMBNAIL);

7. 代码样例

上述的代码样例可以在如下代码仓库中获取(代码路径tools\java\thumbnailator),

git clone git@git.oschina.net:pphh/tools.git

代码仓库地址: http://git.oschina.net/pphh/tools

参考文章:

工具使用说明 https://github.com/coobird/thumbnailator/wiki/Examples

 

 

Linux之shell脚本

 

1. 一个简单的脚本

一个简单的shell脚本如下,

#!/bin/bash
# this is a simple shell script

echo "$1"

str="hello,world"
echo "$str"

exit 0

其中第一行#!/bin/bash声明的这个脚本运行的shell工具,有些脚本会在第一行声明为#!/bin/sh,这两种声明会有细微差别,主要在于:

bash是普通的shell工具,各个linux系统都会提供这个工具。

sh使用的是POSIX标准模式shell工具,一般linux系统会软链到/bin/bash工具,或者在Ubuntu会软链到/bin/dash,软链的时候都会打开相应的POSIX标准模式。

2. 数学计算

一个简单的数学计算脚本如下,

#!/bin/bash

a=1
b=2
i=$(($a+$b))
j=$(($a*$b))
echo "$a+$b=$i"
echo "$a*$b=$j"

read -p "please input a number:" x
read -p "please input another number:" y
echo "$x+$y="$(($x+$y))
echo "$x*$y="$(($x*$y))

上述会将变量a和b相加相乘,并输入结果。如果希望让用户输入,可以使用read这个命令工具。

3. 流程控制

Linux Shell脚本语言提供条件、循环、case switch等用于流程控制,

#!/bin/bash

read -p "please input a number:" x
if [ $x -gt 0 ]; then
 echo "$x is greater than zero"
elif [ $x -eq 0 ]; then
 echo "$x is equal zero"
else
 echo "$x is less than zero" 
fi

for (( i=1;i<=5;i++ ))
do
 echo "for loop: $i times"
done

num=10
while [ $num -gt 0 ]
do
 read -p "please input a number less than 0: " num
done

上述脚本中,第一段让用户输入一个输入数字,然后判断输入的值是大于、等于、小于零;第二段使用for做了5次循环;第三段会让用户输入一个数字,如果数字大于零,则让用户重新输入,一直到有个小于零的数字才退出循环。

4. 用户输入

#!/bin/bash

read -p "please input your first name: " firstname
read -p "please input your last name:" lastname
echo "Your name is: $firstname $lastname"

5. 文件读写

在下面的脚本中,第一段判断/tmp/test.log文件是否在,如果不在,则创建一个,如果在,则删除;第二段则在/tmp目录下找到7天之前的*.log日志文件并删除。

#!/bin/bash

if [ ! -e /tmp/test.log ]; then
 echo "file doesn't exist, try to create one"
 touch /tmp/test.log
else
 echo "file exists there already, try to remove it"
 rm /tmp/test.log
fi

#remove log file which is created earlier than 7 days ago
find /tmp -mtime +7 -type f -name *.log -exec rm -f {} \;
find /tmp -mtime +7 -type f -name [ab].log -exec rm -f {} \;

6. 脚本的执行

脚本的执行有下面几种方式,可以在shell中直接运行脚本,也可以使用sh来调用,也可以使用source来调用。其中source的调用执行后,脚本的变量声明都会留在当前shell中。

./test.sh
sh ./test.sh
source ./test.sh
nohup sh ./loop.sh &

最后一个是运行loop.sh脚本在后台,测试脚本如下,

#!/bin/bash

while true
do
 echo "sleep 1 seconds"
 date +%Y%m%d%H%M%S >> /tmp/date.log
 sleep 1
done

结尾

上述脚本代码可以到此git代码仓库(https://git.oschina.net/pphh/shellTmpl.git)中获取,此代码仓库提供更多的shell脚本模板,比如打印系统版本信息,硬件信息等。

移动自动化测试Appium之环境安装和配置

本文主要讲述在Mac机器上如何安装和配置Appium移动自动化工具,及其遇到的一些问题和解决办法。

1. 基本环境

这是在安装Appium之前的基本软硬件环境,

Mac Mini (OS X Yosemite 10.10.5)

iPod(iOS 8.3)

Xiaomi 4c (Android 5.1.1)

接下来需要在上述环境中安装和配置如下工具,

JDK 7 (1.7.75)

Android SDK (24.4.1)

Xcode (7.2.1)+ iOS simulator (8.3)

Homebrew (0.9.5)

Node (5.7.1)

Appium for Mac (1.4.13)

2. 安装JDK7

Java官方网站下载JDK7,安装后配置如下环境变量,

export JAVA_HOME=/jdk_installation_path/
export PATH=$JAVA_HOME/bin:$PATH
3. 安装Android SDK Tools

国内可以到这里(Android Studio 中文组)下载最新的Android SDK Tools Package,安装后配置如下环境变量,

export ANDROID_HOME=/jdk_installation_path/
export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$PATH

工具包安装后,其实里面还没有Platform Tools,这需要启动Android SDK Manager,通过SDK Manager下载,具体见下图,

android sdk manager

在下载前,推荐参考此文章配置下载源为国内的镜像地址,以提高下载速度。下图配置下载源到东软,

android sdk settings

4. 安装Xcode

直接登录App Store,安装最新版本的Xcode,然后simulator的不同版本可以在Xcode  Preferences中的Downloads页中选择下载。

5. 安装Homebrew

Homebrew是Mac OS上的包管理工具,可以安装一些底层工具包。运行下面的命令即可在Mac上安装这个包管理工具brew,

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

更多详细安装信息可以参考homebrew网站

安装完毕之后,运行如下两个命令安装上相应的工具,

brew install ideviceinstaller
brew install ios-webkit-debug-proxy
6. 安装Node

登录到官方网站,下载最新的Node.js并安装。

7. 安装Appium

Appium官方下载地址:https://bitbucket.org/appium/appium.app/downloads/

选择最新Mac安装包appium-1.4.13.dmg并下载,双击后安装到应用程序中。

8. 环境检查

上述所有工具安装配置完毕之后,运行Appium GUI,点击上面的环境检查按钮,如果环境配置成功的话,则会出现如下信息,

Running iOS Checks
 Xcode is installed at /Applications/Xcode.app/Contents/Developer
 Xcode Command Line Tools are installed.
 DevToolsSecurity is enabled.
 The Authorization DB is set up properly.
 Node binary found at /usr/local/bin/node
 iOS Checks were successful.

Running Android Checks
 ANDROID_HOME is set to "/Users/test/ws/local/android-sdk"
 JAVA_HOME is set to "/System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/."
 ADB exists at /Users/test/ws/local/android-sdk/platform-tools/adb
 Android exists at /Users/test/ws/local/android-sdk/tools/android
 Emulator exists at /Users/test/ws/local/android-sdk/tools/emulator
 Android Checks were successful.

 All Checks were successful
8. 移动设备配置

a)  安卓设备

在安卓设备上,需要开启开发者选项,并且连接USB后启用调试模式。

配置完毕后,通过USB线连接上设备,在机器上运行adb devices命令就可以查询到当前连接设备的GUID,

android ios设备连接

b)  iOS设备

打开“设置” -》“开发者”选项 -》启用“Enable UI Automation”选项

打开“设置” -》“Safari”选项 -》“高级”选项 -》“高级”选项-》启用“JavaScript”和“Web检查器”两个选项。

配置完毕后,可以通过xcode或者instruments查看到当前连接的iOS设备。

9. 遇到的一些问题和解决办法

问题1 - Appium连接iOS 设备启动应用时,Appium提示 “Couldn't not initialize ideviceinstaller;make sure it is installed and works on your system”。

这是由于当前环境缺少ideviceinstaller这个工具,运行命令brew install ideviceinstaller安装后,问题解决。

 

问题2 - Appium连接iOS 设备报错,错误消息为Could not connect to WebKitRemoteDebugger server

这是由于当前环境缺少ios-webkit-debug-proxy这个工具,运行命令brew install ios-webkit-debug-proxy安装后,问题解决。

https://testerhome.com/topics/3129

https://testerhome.com/topics/3206

更多参考信息

appium tutorial - Setting up Appium,这是官方安装文档。

appium tutorial中文版 -http://appium.io/slate/cn/master/?ruby#about-appium

test home的中文文档 1 -https://testerhome.com/topics/3144,该文档不仅仅是一个API文档,也有安装配置相关部分。

appium的中文文档 2 - https://testerhome.com/wiki/appiumdoccn