Android 压缩后图像大小变得太小
我试图通过转换为Base64字符串将图像发送到服务器,但压缩后,图像在服务器端变得太小 代码: 服务器端代码:Android 压缩后图像大小变得太小,android,image,file-upload,android-volley,Android,Image,File Upload,Android Volley,我试图通过转换为Base64字符串将图像发送到服务器,但压缩后,图像在服务器端变得太小 代码: 服务器端代码: [AllowAnonymous] [HttpPost] public IHttpActionResult UploadFile() { string filePath = "No File Uploaded"; HttpRequest httpRequest = HttpContext.Current.Request;
[AllowAnonymous]
[HttpPost]
public IHttpActionResult UploadFile()
{
string filePath = "No File Uploaded";
HttpRequest httpRequest = HttpContext.Current.Request;
var fileData = httpRequest.Form["fileData"];
try
{
string lUniqueId = DateTime.Now.ToString("ddMMyyyyHHmmssff");
string lFileName = lUniqueId + ".jpeg";
filePath = "~/Uploads/AadharCards/" + lFileName;
byte[] imageBytes = Convert.FromBase64String(fileData);
//Save the Byte Array as File.
File.WriteAllBytes(System.Web.Hosting.HostingEnvironment.MapPath(filePath), imageBytes);
return Ok(filePath);
}
catch (Exception)
{
return Ok(false);
}
}
代码片段看起来真的很好。这可以将图像转换为base64 我想你可能有三个问题
Base64.NO_WRAP
代替Base64.DEFAULT
您可以使用下面的代码。我已经实现了相同的功能。我从Gallery中获取图像并转换字节数组中的路径。将imagepath传递到服务器。 SelecteImage是库的URI路径
public static byte[] bitmapdata;
private static String imagepath;
Bitmap bitmap = BitmapFactory.decodeFile(selectedImage.toString());
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
bitmapdata = resizeImage(stream.toByteArray());
imagepath = Base64.encodeToString(bitmapdata, Base64.DEFAULT);
/* Resize Image */
byte[] resizeImage(byte[] input) {
Bitmap original = BitmapFactory.decodeByteArray(input, 0, input.length);
Bitmap resized = Bitmap.createScaledBitmap(original, 400, 480, true);
ByteArrayOutputStream blob = new ByteArrayOutputStream();
resized.compress(Bitmap.CompressFormat.JPEG, 50, blob);
return blob.toByteArray();
}
静止图像太小。编码后是否尝试解码图像?可能是服务器问题,因为您的代码似乎正确?
试图通过转换为Base64字符串将图像发送到服务器,但压缩后图像在服务器端变得太小。
请告知原始图像的分辨率。然后在客户机上解析调整大小的图像。然后是服务器上图像的分辨率。压缩后图像大小变得太小
我认为您的位图在压缩前已经太小了。请告诉bmp.getWidth()和bmp.getHeight()。你从哪里开始得到位图?原始图像2448 x 3264服务器图像427 x 60I要求三种分辨率。如何将此图像保存为原始大小?要保存图像,你必须在服务器端执行一个代码,然后他们创建imageurl。使用Picaso或glide库使用imageurl从服务器下载。不,不,我的意思是你提到了400480大小。我想保存原始图像。从resizeImage方法中删除下一行,并传递原始位图对象,而不是在compress方法中调整大小。Bitmap resized=Bitmap.createScaledBitmap(原始,400480,真);但这就是我想要上传的图像变得太小的实际问题
public static byte[] bitmapdata;
private static String imagepath;
Bitmap bitmap = BitmapFactory.decodeFile(selectedImage.toString());
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
bitmapdata = resizeImage(stream.toByteArray());
imagepath = Base64.encodeToString(bitmapdata, Base64.DEFAULT);
/* Resize Image */
byte[] resizeImage(byte[] input) {
Bitmap original = BitmapFactory.decodeByteArray(input, 0, input.length);
Bitmap resized = Bitmap.createScaledBitmap(original, 400, 480, true);
ByteArrayOutputStream blob = new ByteArrayOutputStream();
resized.compress(Bitmap.CompressFormat.JPEG, 50, blob);
return blob.toByteArray();
}