一些机器人上传乱码图像

时间:2012-07-05 19:10:02

标签: android post photos

首先,我使用此代码将照片保存到Android的SD卡中:

PictureCallback jpegCallback = new PictureCallback() {
        public void onPictureTaken(byte[] data, Camera camera) {

    FileOutputStream outStream = null;

    currentFilename = String.format("%d", System.currentTimeMillis());              
    outStream = new FileOutputStream("/sdcard/" + currentFilename + ".jpg");                    
    outStream.write(data);
    outStream.close();

    }
};

然后我使用此代码在Android设备上上传照片:

public void uploadPhoto() {

        try {

            // Create HttpPost
            HttpPost post = new HttpPost("http://www.example.com/upload.php");
            HttpClient client = new DefaultHttpClient();
            client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
            MultipartEntity entity = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE );

            // Add the Picture as "userfile"
            entity.addPart( "userfile", new FileBody( 
                new File( "/sdcard/", currentFilename + ".jpg" ),
                "image/jpeg")
            );


            // Send the data to the server
            post.setEntity( entity );
            client.execute( post );


        } catch (Exception e) {
            // catch
        } finally {
            // finally
        }

}

这适用于运行Android 2.2.2的LG Optimus V和运行Android 2.3.4的Droid X

然而 - 有一台运行2.3.4的HTC Evo(与我的Droid X相同)的用户正在体验她所有上传的照片在保存到手机时(以及当他们到达服务器时)都会被打乱。图像看起来像一串锯齿状的彩色线条。

有关此处可能发生的事情的任何想法以及可以采取哪些措施来解决问题?

更新

我能够访问这款手机,当我从sdcard中取出jpg文件时,它说文件大小为3.5 - 4.0 MB,但它们无法打开并且可能已损坏......但文件在其他手机上正常工作。

3 个答案:

答案 0 :(得分:4)

看起来像图片大小的问题。当宽度和高度错误时,从阵列到图像的数据解码会导致图像混乱。

可能会使用支持的屏幕尺寸拍摄照片:

Parameters params = camera.getParameters();
List<Camera.Size> sizes = params.getSupportedPictureSizes();

尝试设置其中一个,例如最大的,如图片大小:

List<Size> sizes = params.getSupportedPictureSizes();
Size theBiggest=null;
int maxWidth = 0;
for (Size s : sizes) {
    if (s.width > maxWidth) {
        maxWidth = s.width;
        theBiggest = s;
    }
}

params.setPictureSize(theBiggest.width, theBiggest.height);
camera.setParameters(params);

答案 1 :(得分:0)

将JPEG格式的位图压缩到输出流中。假设dataBitmap类型

currentFilename = String.format("%d", System.currentTimeMillis());              
outStream = new FileOutputStream("/sdcard/" + currentFilename + ".jpg");   
data.compress(Bitmap.CompressFormat.JPEG, 90, outStream );    
outStream.close();

您可以将压缩比参数更改为compress api ..例如,传递80以获得80%压缩。

This post可能与您的问题有关。

答案 2 :(得分:0)

需要将图像缓存到SD卡以实现完整(非压缩)大小。步骤很简单

  1. 捕捉图片
  2. 将捕获的图像保存到sdcard
  3. 从sdcard
  4. 加载已保存的图片
  5. 将其转换为字节数组并添加为ByteArrayBody,或者您可以跳过步骤3并使用缓存文件创建文件正文。
  6. 注意:目前我离开了我的电脑。如果没有详细的帖子,我会发一个详细的答案。祝你好运。