Android 在max qualtiy kotlin使用截击上传捕获的图像
我需要上传图像到php服务器,但我需要在它将捕获和上传位图之前,图像的最高质量,但我需要图像是清晰的,所以我尝试了这段代码,但似乎无法让它工作 所以基本上我需要上传存储在这条线上的图像Android 在max qualtiy kotlin使用截击上传捕获的图像,android,kotlin,android-volley,Android,Kotlin,Android Volley,我需要上传图像到php服务器,但我需要在它将捕获和上传位图之前,图像的最高质量,但我需要图像是清晰的,所以我尝试了这段代码,但似乎无法让它工作 所以基本上我需要上传存储在这条线上的图像 cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, image_uri) 类捕获:AppCompatActivity(){ 私有val权限\ U代码=1000; 专用val图像捕获代码=1001 var image_uri:uri?=null 变量位图:位图?=null
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, image_uri)
类捕获:AppCompatActivity(){
私有val权限\ U代码=1000;
专用val图像捕获代码=1001
var image_uri:uri?=null
变量位图:位图?=null
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity\u捕获)
//按钮点击
btn_take_photo.setOnClickListener{
//如果系统操作系统是棉花糖或以上,我们需要请求运行时权限
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.M){
if(checkSelfPermission(Manifest.permission.CAMERA)
==PackageManager.PERMISSION\u被拒绝||
checkSelfPermission(Manifest.permission.WRITE\u外部存储)
==PackageManager.PERMISSION\u被拒绝){
//权限未启用
val permission=arrayOf(Manifest.permission.CAMERA,Manifest.permission.WRITE\u外部存储)
//显示弹出窗口以请求权限
请求权限(权限、权限\代码)
}
否则{
//已授予许可
openCamera()
}
}
否则{
//系统操作系统<棉花糖
openCamera()
}
}
}
私人娱乐openCamera(){
val values=ContentValues()
value.put(MediaStore.Images.Media.TITLE,“新图片”)
value.put(MediaStore.Images.Media.DESCRIPTION,“从相机中”)
image\u uri=contentResolver.insert(MediaStore.Images.Media.EXTERNAL\u CONTENT\u uri,值)
//摄像机意图
val cameraIntent=Intent(MediaStore.ACTION\u IMAGE\u捕获)
cameraIntent.putExtra(MediaStore.EXTRA_输出,图像_uri)
startActivityForResult(摄像机帐篷、图像捕获码)
}
重写onRequestPermissionsResult(请求代码:Int,权限:Array,GrantResult:IntArray){
//当用户在权限请求弹出窗口中按允许或拒绝时调用
何时(请求代码){
权限\u代码->{
如果(grantResults.size>0&&grantResults[0]==
PackageManager.权限(已授予){
//已授予弹出窗口的权限
openCamera()
}
否则{
//来自弹出窗口的权限被拒绝
Toast.makeText(这是“拒绝许可”,Toast.LENGTH\u SHORT.show())
}
}
}
}
重写activityResult(请求代码:Int,结果代码:Int,数据:Intent?){
super.onActivityResult(请求代码、结果代码、数据)
//在从摄影机捕获图像时调用
if(resultCode==Activity.RESULT\u确定){
val takenImage:Bitmap=BitmapFactory.decodeFile(image\u uri.toString())
//将捕获的图像设置为图像视图
imgv_capture_image_preview.setImageURI(image_uri)
val url=connection.server\u url+“body\u pictures.php”
val rq:RequestQueue=Volley.newRequestQueue(此)
val sr=object:StringRequest(Method.POST、url、Response.Listener{Response->
val检查:字符串=响应
val checknew=check.replace(“\\s.toRegex(),”)
如果(checknew==“成功”){
Toast.makeText(
这
“图像上传成功”,
吐司,长度
).show()
}否则{
Toast.makeText(
这
“错误图像上载失败,”+checknew,
吐司,长度
).show()
}
},Response.ErrorListener{error->
Toast.makeText(
这
“服务器超时”,
吐司,长度
).show()
}) {
重写fun getParams():MutableMap{
val map=HashMap()
val images=takenImage?.let{getStringImage(it)}
如果(图像!=null){
map.put(“图像数据”,图像)
}
返回图
}
}
rq.add(sr)
}
}
有趣的getStringImage(位图:位图):字符串{
val baos=ByteArrayOutputStream()
bitmap.compress(bitmap.CompressFormat.JPEG,100,baos)
val b=baos.toByteArray()
返回Base64.encodeToString(b,Base64.DEFAULT)
}
class capture : AppCompatActivity() {
private val PERMISSION_CODE = 1000;
private val IMAGE_CAPTURE_CODE = 1001
var image_uri: Uri? = null
var bitmap: Bitmap? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_capture)
//button click
btn_take_photo.setOnClickListener {
//if system os is Marshmallow or Above, we need to request runtime permission
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
if (checkSelfPermission(Manifest.permission.CAMERA)
== PackageManager.PERMISSION_DENIED ||
checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_DENIED){
//permission was not enabled
val permission = arrayOf(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE)
//show popup to request permission
requestPermissions(permission, PERMISSION_CODE)
}
else{
//permission already granted
openCamera()
}
}
else{
//system os is < marshmallow
openCamera()
}
}
}
private fun openCamera() {
val values = ContentValues()
values.put(MediaStore.Images.Media.TITLE, "New Picture")
values.put(MediaStore.Images.Media.DESCRIPTION, "From the Camera")
image_uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values)
//camera intent
val cameraIntent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, image_uri)
startActivityForResult(cameraIntent, IMAGE_CAPTURE_CODE)
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
//called when user presses ALLOW or DENY from Permission Request Popup
when(requestCode){
PERMISSION_CODE -> {
if (grantResults.size > 0 && grantResults[0] ==
PackageManager.PERMISSION_GRANTED){
//permission from popup was granted
openCamera()
}
else{
//permission from popup was denied
Toast.makeText(this, "Permission denied", Toast.LENGTH_SHORT).show()
}
}
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
//called when image was captured from camera intent
if (resultCode == Activity.RESULT_OK){
val takenImage: Bitmap = BitmapFactory.decodeFile(image_uri.toString())
//set image captured to image view
imgv_capture_image_preview.setImageURI(image_uri)
val url = connection.server_url + "body_pictures.php"
val rq: RequestQueue = Volley.newRequestQueue(this)
val sr = object : StringRequest(Method.POST, url, Response.Listener { response ->
val check: String = response
val checknew = check.replace("\\s".toRegex(), "")
if (checknew == "success") {
Toast.makeText(
this,
"Image uploaded Successful",
Toast.LENGTH_LONG
).show()
} else {
Toast.makeText(
this,
"ERROR image upload failed, " + checknew,
Toast.LENGTH_LONG
).show()
}
}, Response.ErrorListener { error ->
Toast.makeText(
this,
"Server TIME OUT",
Toast.LENGTH_LONG
).show()
}) {
override fun getParams(): MutableMap<String, String> {
val map = HashMap<String, String>()
val images = takenImage?.let { getStringImage(it) }
if (images != null) {
map.put("image_data", images)
}
return map
}
}
rq.add(sr)
}
}
fun getStringImage(bitmap: Bitmap): String? {
val baos = ByteArrayOutputStream()
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos)
val b = baos.toByteArray()
return Base64.encodeToString(b, Base64.DEFAULT)
}