Tôi có một ứng dụng chụp ảnh bằng cách sử dụng ảnh gốc Camera
và sau đó tải chúng lên máy chủ. Vấn đề của tôi là tất cả các bức ảnh đều có giá trị định hướng EXIF là 0, và điều này sẽ làm rối loạn màn hình ở nơi khác.Dữ liệu EXIF Android luôn 0, cách thay đổi?
Làm cách nào để thay đổi hướng EXIF? Tôi không tìm cách sửa nó cho mọi hoàn cảnh, chỉ cần thay đổi nó thành một giá trị khác.
Tôi đang sử dụng Samsung Galaxy Note 4
tôi đã cố gắng giải pháp này đã đưa ra định hướng máy ảnh trước khi chụp ảnh: Setting Android Photo EXIF Orientation
Camera c = Camera.open();
c.setDisplayOrientation(90);
Camera.Parameters params = mCamera.getParameters();
params.setRotation(0); // tried 0, 90, 180
c.setParameters(params);
nhưng nó không ảnh hưởng đến dữ liệu EXIF kết quả, nó vẫn luôn 0
tôi cũng đã cố gắng những giải pháp mà hình ảnh được quay sau khi nó được thực hiện: EXIF orientation tag value always 0 for image taken with portrait camera app android
và trong khi điều này xoay ảnh, định hướng EXIF vẫn phải lúc nào cũng 0.
Tôi cũng đã cố gắng thiết lập các dữ liệu EXIF trực tiếp: How to save Exif data after bitmap compression in Android
private Camera.PictureCallback mPicture = new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
final File pictureFile = getOutputMediaFile(MEDIA_TYPE_IMAGE, "");
try {
FileOutputStream fos = new FileOutputStream(pictureFile);
ExifInterface exif = new ExifInterface(pictureFile.toString());
exif.setAttribute(ExifInterface.TAG_ORIENTATION, "3");
exif.saveAttributes();
fos.write(data);
fos.close();
//upload photo..
}
}
}
nhưng EXIF Định hướng vẫn là 0 sau khi tải lên.
Tôi cũng đã xem xét các giải pháp này:
Exif data TAG_ORIENTATION always 0
How to write exif data to image in Android?
How to get the Correct orientation of the image selected from the Default Image gallery
how to set camera Image orientation?
nhưng tất cả đều liên quan đến việc điều chỉnh định hướng bằng cách xoay, mà không ảnh hưởng đến dữ liệu EXIF hoặc setti ng dữ liệu EXIF trực tiếp mà dường như không hoạt động.
Làm cách nào để thay đổi dữ liệu định hướng EXIF của tệp từ 0 đến 3?
UPDATE:
đây là mã tải lên của tôi:
Bitmap sBitmap = null;
final File sResizedFile = getOutputMediaFile(MEDIA_TYPE_IMAGE, "_2");
try {
sBitmap = BitmapFactory.decodeStream(new FileInputStream(pictureFile), null, options);
} catch (FileNotFoundException e) {
Log.e("App", "[MainActivity] unable to convert pictureFile to bitmap");
e.printStackTrace();
return;
}
// ... compute sw and sh int values
Bitmap sOut = Bitmap.createScaledBitmap(sBitmap, sw, sh, false);
Bitmap rotatedBitmap = rotateBitmap(sOut, 3);
FileOutputStream sfOut;
try {
sfOut = new FileOutputStream(sResizedFile);
rotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 70, sfOut);
sfOut.flush();
sfOut.close();
sBitmap.recycle();
sOut.recycle();
rotatedBitmap.recycle();
} catch (Exception e) {
Log.e("App", "[MainActivity] unable to save thumbnail");
e.printStackTrace();
return;
}
// upload small thumbnail
TransferObserver sObserver = transferUtility.upload(
"stills/small", /* The bucket to upload to */
filename + ".jpg", /* The key for the uploaded object */
sResizedFile /* The file where the data to upload exists */
);
trên thiết bị nào bạn đang thử? – MKJParekh
Samsung Galaxy Note 4 – Cbas
@Cbas, là _ "Giá trị định hướng EXIF của 0" _ ** trước ** hoặc ** sau ** bạn tải lên nhóm trực tuyến không? Tôi vừa thử nghiệm nhóm AWS của Amazon và họ giữ lại EXIF ** sau khi tải lên **. Bạn phải sử dụng một máy chủ dựa trên nhóm khác (ví dụ: Google Cloud), phải không? Sau đoạn mã đầu tiên bạn nói _ "nó không ảnh hưởng đến dữ liệu EXIF kết quả, nó vẫn luôn là 0" _ ** vì vậy đó là vấn đề về mã **? Sau đó, sau đoạn mã thứ hai bạn nói _ "nhưng định dạng EXIF vẫn là 0 ** sau khi tải lên **." _ ** vì vậy đó là sự cố tải lên/máy chủ? ** Vui lòng xác nhận nếu giá trị EXIF luôn bằng 0 ngay cả trước khi tải lên hoặc chỉ sau tải lên? –