Я успешно добавил водяной знак к просмотру изображения камеры, которое пользователь берет на свое приложение для Android, однако, когда он отправляется в Instagram или Tumblr, водяной знак isn ' там. Я считаю, что это связано с тем, что он использует изображение из локального хранилища и не имеет ничего общего с предварительным просмотром.Добавьте водяной знак к фотографии до того, как он поделился в социальных сетях
Мне кажется, мне нужно изменить код «снимок» для камеры, так что когда он берет фотографию, она преобразует ее в растровое изображение, добавляет ее к холсту с водяным знаком, а затем сохраняет его, Я не знаю, как это сделать.
Я считаю, что это источник файла, который совместно
final File fileToUpload = new File(StorageUtils.getStoragePath(ShareActivity.this), StorageUtils.DEFAULT_IMAGE);
Вот код картины взять для камеры.
protected void takePicture() {
if (cameraPreview == null) return;
Camera camera = cameraPreview.getCamera();
if (camera == null) return;
camera.takePicture(null, null, null, new Camera.PictureCallback() {
@Override
public void onPictureTaken(byte[] data, Camera camera) {
if (data == null || data.length == 0) return;
File imageFile = new File(StorageUtils.getStoragePath(CameraActivity.this), StorageUtils.DEFAULT_IMAGE);
File parentDir = imageFile.getParentFile();
if (!parentDir.exists()) {
if (!parentDir.mkdirs()) {
Log.d(TAG, "Failed to create directory: " + parentDir.getAbsolutePath());
return;
}
}
try {
FileOutputStream fos = new FileOutputStream(imageFile);
fos.write(data);
fos.close();
} catch (IOException e) {
Log.d(TAG, "Failed to save file: " + imageFile.getAbsolutePath());
e.printStackTrace();
return;
}
//workaround for bug with facing camera introduced (intentionally?) in 4.0+
if (isCameraFacingFront && Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath());
Matrix matrix = new Matrix();
//flip image vertically
matrix.setRotate(180);
matrix.postScale(-1, 1);
Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, false);
bitmap.recycle();
try {
rotatedBitmap.compress(Bitmap.CompressFormat.JPEG, 80, new FileOutputStream(imageFile));
rotatedBitmap.recycle();
} catch (FileNotFoundException e) {
Log.d(TAG, "Failed to rotate and save bitmap: " + imageFile.getAbsolutePath());
e.printStackTrace();
return;
}
}
Intent intent = new Intent(CameraActivity.this, ShareActivity.class);
intent.putExtra(ShareActivity.PARAM_IMAGE_FILE, imageFile.getAbsolutePath());
if (business != null)
intent.putExtra(ShareActivity.PARAM_BUSINESS, business);
startActivity(intent);
}
});
}
Или я могу быть вне базы. Любая помощь или указание в правильном направлении очень ценится! Спасибо!
Вы на правильном пути. После того, как вы получили изображение, расшифруйте его, создайте для него новый холст, нарисуйте водяной знак на холсте и сохраните это изображение. Вы почти просто собираетесь повторить код для перелистывания изображения, просто рисуя на холсте прямо перед сохранением нового изображения. – Guardanis