java – 通过摄像头拍摄照片并以bytearray形式发送到服务器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 通过摄像头拍摄照片并以bytearray形式发送到服务器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5808字,纯文字阅读大概需要9分钟。
内容图文
![java – 通过摄像头拍摄照片并以bytearray形式发送到服务器](/upload/InfoBanner/zyjiaocheng/704/fe0d851ea28a4f0db023a568a4da94ea.jpg)
我正在开发一个Andorid应用程序,我希望用户在其中拍照,然后保存它我将它发送到服务器.现在,我将图片作为字节数组发送到服务器.当我尝试将字节数组作为PNG文件保存到文件中,然后尝试打开文件时,图像查看器会抱怨PNG有错误而无法显示. PNG文件大小为122Kb.
当我尝试使用Scalr库来调整图像大小时,它表示图像源不能为空.直接保存字节数会导致PNG损坏.我应该如何将文件正确转换并发送到服务器,因此没有错误.
这是我正在使用并发送它的相机代码.
public class AddPhotoForUser extends DrawerLoader {
private static final int CAMERA_PIC_REQUEST = 22;
Button BtnSelectImage;
private ImageView ImgPhoto;
private static volatile Bitmap photo;
private static volatile ByteArrayOutputStream stream = new ByteArrayOutputStream();
final PersonServiceImpl personService = new PersonServiceImpl();
private String[] navMenuTitles;
private TypedArray navMenuIcons;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.upload_user_photo);
navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);
navMenuIcons = getResources()
.obtainTypedArray(R.array.nav_drawer_icons);
set(navMenuTitles, navMenuIcons);
Button uploadImageButton = (Button) findViewById(R.id.uploadUserImageButton);
uploadImageButton.setVisibility(View.INVISIBLE);
ImgPhoto = (ImageView) findViewById(R.id.userPhotoImageView);
BtnSelectImage = (Button) findViewById(R.id.userPhotoButtonSelect);
BtnSelectImage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);
} catch (Exception e) {
Toast.makeText(getApplicationContext(), "Couldn't load photo", Toast.LENGTH_LONG).show();
}
}
});
uploadImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!(v == null)) {
uploadImage();
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Intent intent = new Intent(AddPhotoForUser.this, RestaurantList.class);
startActivity(intent);
finish();
}
}
});
}
@Override
public void onBackPressed() {
Intent intent = new Intent(AddPhotoForUser.this, Login.class);
startActivity(intent);
finish();
}
@Override
public void onActivityResult(final int requestCode, int resultCode, Intent data) {
try {
switch (requestCode) {
case CAMERA_PIC_REQUEST:
if (resultCode == RESULT_OK) {
try {
photo = (Bitmap) data.getExtras().get("data");
if (!(photo == null)) {
ImgPhoto.setImageBitmap(photo);
Button uploadImageButton = (Button) findViewById(R.id.uploadUserImageButton);
uploadImageButton.setVisibility(View.VISIBLE);
}
} catch (Exception e) {
Toast.makeText(this, "Couldn't load photo", Toast.LENGTH_LONG).show();
}
}
break;
default:
break;
}
} catch (Exception e) {
e.printStackTrace();
}
}
private void uploadImage() {
if (!(photo == null)) {
photo.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
personService.addUserProfilePhoto(byteArray);
}
}
}
以下是将映像保存到磁盘的服务器端代码:
@Override
public Boolean updateProfilePhoto(byte[] photo) {
Person person = getCurrentlyAuthenticatedPerson();
try{
InputStream in = new ByteArrayInputStream(photo);
BufferedImage image = ImageIO.read(in);
image = Scalr.resize(image, Scalr.Method.QUALITY, 100, 100);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(image, "png", baos);
baos.flush();
File file = new File(userImagePath);
if (file.exists() && file.isDirectory()) {
OutputStream outputStream = new FileOutputStream(new File(userImagePath + person.getUserId()+".png"));
outputStream.write(baos.toByteArray());
outputStream.close();
} else {
File file1 = new File(userImagePath+person.getUserId()+".png");
if (file1.exists()) {
try {
OutputStream outputStream = new FileOutputStream(file1);
outputStream.write(baos.toByteArray());
outputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
} else {
boolean result = file1.createNewFile();
System.out.println("Result of file1 creation is "+result);
OutputStream outputStream = new FileOutputStream(file1);
outputStream.write(baos.toByteArray());
outputStream.close();
}
}
return true;
}catch (Exception e){
e.printStackTrace();
return false;
}
}
如果我不使用Scalr库,则没有错误,但它是一个损坏的文件.这是Scalr错误日志:
java.lang.IllegalArgumentException: src cannot be null
at org.imgscalr.Scalr.resize(Scalr.java:1564)
at org.imgscalr.Scalr.resize(Scalr.java:1415)
at com.journaldev.spring.service.PersonServiceImpl.updateProfilePhoto(PersonServiceImpl.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
at com.sun.proxy.$Proxy51.updateProfilePhoto(Unknown Source)
at com.journaldev.spring.Controller.PersonController.addProfilePhotoForUser(PersonController.java:100)
你能帮忙的话,我会很高兴.非常感谢.
内容总结
以上是互联网集市为您收集整理的java – 通过摄像头拍摄照片并以bytearray形式发送到服务器全部内容,希望文章能够帮你解决java – 通过摄像头拍摄照片并以bytearray形式发送到服务器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。