Android是目前市场上流行的移动操作系统之一,很多应用都需要上传图片至服务器,但有时需要裁剪图片以满足不同的需求。本篇文章将介绍如何从Android设备中裁剪图片并上传至服务器。
一、裁剪图片
在Android中,我们可以使用系统自带的裁剪功能,也可以使用第三方库来实现裁剪。这里介绍一下常用的第三方库Picasso和Glide:
Picasso裁剪图片:
Picasso.with(context).load(imageUrl).resize(width, height).centerCrop().into(imageView);// 设置imageView高度和宽度
Glide裁剪图片:
Glide.with(context)
.load(imageUrl)
.override(width, height)
.transform(new CenterCrop())
.into(imageView);
二、上传图片
1.使用HttpURLConnection上传图片:
private void uploadImage(String imagePath) {
String end = "\r\n";
String twoHyphens = "--";
String boundary = "******";
try {
URL url = new URL("your server url");
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setUseCaches(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Connection", "keep-alive");
connection.setRequestProperty("Charset", "UTF-8");
connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
DataOutputStream dos = new DataOutputStream(connection.getOutputStream());
dos.writeBytes(twoHyphens + boundary + end);
dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\"; filename=\""
+ imagePath.substring(imagePath.lastIndexOf("/") + 1)
+ "\""
+ end);
dos.writeBytes(end);
FileInputStream fis = new FileInputStream(imagePath);
byte[] buffer = new byte[8192];
int count = 0;
while ((count = fis.read(buffer)) != -1) {
dos.write(buffer, 0, count);
}
fis.close();
dos.writeBytes(end);
dos.writeBytes(twoHyphens + boundary + twoHyphens + end);
dos.flush();
InputStream is = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "utf-8");
BufferedReader reader = new BufferedReader(isr);
StringBuilder builder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
Log.i(TAG, "upload response: " + builder.toString());
dos.close();
is.close