Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从iOS和android上传的图像是不同的_Android_Ios_Image_Multipart - Fatal编程技术网

从iOS和android上传的图像是不同的

从iOS和android上传的图像是不同的,android,ios,image,multipart,Android,Ios,Image,Multipart,我有一个iOS版和安卓版的应用程序。应用程序使用多部分上传将图像(本例中为jpeg)从多媒体资料或相机发送到服务器 这些图像在大小、分辨率和文件大小上都是相同的,当我运行imagemagick比较时,它们是相同的 当它们到达服务器时,肉眼看起来一模一样,像素数和尺寸都相同,都是320 x 483,分辨率为72像素。但是,它们有不同的文件大小,尽管加载每个文件时没有指定压缩。当我运行imagemagick compare时,它们明显不同 以下是原始图像: 以下是上载时的图像: IOS代码

我有一个iOS版和安卓版的应用程序。应用程序使用多部分上传将图像(本例中为jpeg)从多媒体资料或相机发送到服务器

这些图像在大小、分辨率和文件大小上都是相同的,当我运行imagemagick比较时,它们是相同的

当它们到达服务器时,肉眼看起来一模一样,像素数和尺寸都相同,都是320 x 483,分辨率为72像素。但是,它们有不同的文件大小,尽管加载每个文件时没有指定压缩。当我运行imagemagick compare时,它们明显不同

以下是原始图像:

以下是上载时的图像:

IOS代码(使用AFN网络)

我认为是像素强度造成了差异


有人能解释一下为什么图像会不同吗?我是否必须先将Android图像保存到文件中,然后将其作为文件上传

在Android下,您不会上载jpeg文件

相反,你会把jpeg文件转换成位图,然后将位图压缩成一些字节,最终上传

难怪最终会得到不同的字节

删除位图。只需直接上传jpg文件的字节

 params.put("file", new ByteArrayInputStream(bitmapdata), "androidMobile.jpg");
改为

 params.put("file", in, "androidMobile.jpg");

直接删除位图代码,因为该输入流只能读取一次。

您始终可以比较字节以查看更改的内容。iOS图像的大小调整和上载似乎添加了白色边框。这可能是由于在调整大小期间重新采样,然后舍入或截断到最近的整像素。根据高度调整大小时,宽度中的最后一个像素可能不是完整像素。例如,(483/640)*423=319.2328125,但图像填充宽度为320。319.2可能由您的iOS代码填充为白色至320;而它是用Android代码中最后一列的图像像素数据进行插值或扩展的。也许有一个虚拟像素设置可以缓解iOS中的这种情况。我可以理解你对边界的看法,但似乎有一个更全球性的变化。你认为这是因为填充导致像素位置的改变吗?是的,这似乎是一个可能的答案,我正计划下一步尝试。如果我从相机上传图像,这意味着我必须先将其保存到文件系统中,还是四处搜索假定的位置?如果您以正确的方式使用相机意图,相机应用程序会将图像保存到您指定的文件中,然后您已经知道它是哪个文件。
 params.put("file", new ByteArrayInputStream(bitmapdata), "androidMobile.jpg");
 params.put("file", in, "androidMobile.jpg");