2013-09-02 4 views
0

Мое приложение в настоящее время отправляет изображения с устройства Android на PHP-скрипт, преобразовывая изображение в бит-массив, а затем конвертируя его в base64. Строка base64 затем отправляется в HTTP-запросе.Android изменит размер изображения перед отправкой по HTTP

Проблема в том, что изображение крупное (например, взятое из камеры андроида), тогда передача не удалась. Я хочу изменить размер изображения, прежде чем он перейдет к процессу преобразования.

Как я могу это сделать? Я попытался это сделать, но пока не повезло.

+0

Вы должны проверить мой ответ http://stackoverflow.com/questions/18570687/get-the-image-as-thumnail/18570836#18570836 –

ответ

0

Если размер вашего изображения большой, тогда вам нужно иметь первую шкалу для малого размера, а затем закодировать это по классу base64, а затем отправить это на свой сервер.

Для масштабирования изображения читать эту http://developer.sonymobile.com/2011/06/27/how-to-scale-images-for-your-android-application

или другую должность

0

Использование сжатия JPEG!

(Потому что я не знаю, как пуская в base64 закодированный массив будет вам сэкономить любое пространство.)

Могу ли я прыгать и предположим, у вас есть сцена, где вы преобразованный ваше изображение в массив пикселей вместо этого? Если нет, я предполагаю, что нет причин, по которым применяется очевидное преобразование из байтов в целые числа, представляющие пиксели. Затем мы преобразуем его в сжатый jpeg.

final int[] pixels = yourpixels; 

Вы также будете нуждаться в ширину и высоту:

final int width = theWidth; etc... 

Далее разжиться ваш выходной поток в клиенте:

final HttpURLConnection connection = doWhateverYouDoToOpenYourConnection(); 
final OutputStream httpOutputStream = connection.getOutputStream(); 

Теперь важный шаг заключается в использовании compression methods битовой карты Android для потоковой передачи сжатого изображения на выходной поток http:

final Bitmap androidBitmap = Bitmap.createBitmap(pixels, width, height,Config.ARGB_8888); 
androidBitmap.compress(android.graphics.Bitmap.CompressFormat.JPEG, YOUR_QUALITY_INT, outputStream); 

Начните с чего-то вроде YOUR_QUALITY_INT = 85, чтобы увидеть значительное улучшение размера изображения без заметной деформации.

Если это не удается, создайте масштабированное растровое изображение с scale matrix: документация here. Это уменьшает ширину и высоту вашего растрового изображения при создании, что, очевидно, уменьшает размер запроса.

Надеюсь, это поможет.

Смежные вопросы