728x90
안녕하세요.
오늘은 이미지(bitmap)를 string으로 변환하고, 다시 string을 이미지(bitmap)로 변환시키는 방법에 대해
배워보도록 하겠습니다.
먼저 예제부터 생성하겠습니다.
1. 레이아웃 ( activity_main.xml )
레이아웃은 아래와 같이 만들었어요.
스크롤뷰를 사용한 이유는 제가 사용한 이미지가 조금 길어서, 이미지를 넣으면, 화면이 잘려서 그랬습니다
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layoutDescription="@xml/activity_main_scene"
tools:context=".MainActivity">
<ScrollView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="10dp">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="1. 원본 이미지"
android:textColor="@color/black"
android:textSize="24sp" />
<ImageView
android:id="@+id/original_img_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher" />
<TextView
android:id="@+id/textView3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="2. 이미지를 string으로 변환"
android:textColor="@color/black"
android:textSize="24sp" />
<TextView
android:id="@+id/string_size"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:text="- String 길이 : "
android:textColor="#D0000000"
android:textSize="22sp" />
<TextView
android:id="@+id/textView2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="3.string을 변환한 이미지"
android:textColor="@color/black"
android:textSize="24sp" />
<ImageView
android:id="@+id/string_img_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/ic_launcher"/>
</LinearLayout>
</ScrollView>
<Button
android:id="@+id/change_btn"
android:layout_width="match_parent"
android:layout_height="60dp"
android:text="원본 이미지 가져오기" />
</LinearLayout>
2. MainActivity
스틱코드를 사용하면, 비트맵을 string으로 변환하고, string을 비트맵으로 변환하는 메서드를 손쉽게 사용할 수 있어요.
사용법은 아래와 같습니다.
https://stickode.com/detail.html?no=2571
R.drawable.sample_img 는 인터넷에서 무료이미지 다운받아서 사용했습니다.
이미지 적당한거로 대체하시면 됩니다.
public class MainActivity extends AppCompatActivity {
ImageView oriImgView;
ImageView stringImgView;
TextView imgStringLengthTv;
String imgString;
Button changeBtn;
int num = 0;
Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
oriImgView = findViewById(R.id.original_img_view);
stringImgView = findViewById(R.id.string_img_view);
imgStringLengthTv = findViewById(R.id.string_size);
changeBtn = findViewById(R.id.change_btn);
context = this;
changeBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
switch (num) {
case 0: //원본 이미지뷰에 변환하려는 예시 이미지를 넣어준다.
oriImgView.setImageResource(R.drawable.sample_img);
changeBtn.setText("이미지를 스트링으로 변환하기");
break;
case 1: //원본 이미지를 string 으로 변환하고 ui 에 표시해줌
changeBtn.setText("진행중");
//1. res 에 존재하는 이미지를 bitmap 으로 가져온다.
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.sample_img);
//2. ImageBitmap 클래스의 메서드를 사용해서 bitmap 을 String 으로 변환한다.(시간이 걸릴 수 있음)
imgString = bitmapToString(bitmap);
//3. ui에 표시
String lengthText = "- String 길이 : "+imgString.length();
imgStringLengthTv.setText(lengthText);
changeBtn.setText("스트링을 이미지로 변환하기");
break;
case 2: //string 값을 이미지(bitmap)으로 재변환
changeBtn.setText("진행중");
Bitmap stringBitmap = stringToBitmap(imgString);
stringImgView.setImageBitmap(stringBitmap);
changeBtn.setText("완료됨");
break;
default:
break;
} //switch
num++;
}
});
}
/*스틱코드 추가부분 ~~~~*/
//bitmap 을 string 형태로 변환하는 메서드 (이렇게 string 으로 변환된 데이터를 mysql 에서 longblob 의 형태로 저장하는식으로 사용가능)
public String bitmapToString(Bitmap bitmap){
String image = "";
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
byte[] byteArray = stream.toByteArray();
image = Base64.getEncoder().encodeToString(byteArray);
return image;
}
//string 을 bitmap 형태로 변환하는 메서드
public Bitmap stringToBitmap(String data){
Bitmap bitmap = null;
byte[] byteArray = Base64.getDecoder().decode(data);
ByteArrayInputStream stream = new ByteArrayInputStream(byteArray);
bitmap = BitmapFactory.decodeStream(stream);
return bitmap;
}
/*~~~~ 스틱코드 추가부분 */
}
시현
'안드로이드 자바' 카테고리의 다른 글
[Java][Android] 터치 좌표 출력하기 (0) | 2021.11.17 |
---|---|
[Java][Android] 안드로이드 웹브라우저 화면 구성 (0) | 2021.11.15 |
[JAVA][Android] 랜덤숫자 생성하고 공유하는 앱 만들기 (0) | 2021.11.12 |
[JAVA][Android] Splash 화면 만들기 (0) | 2021.11.10 |
[Java][Android] retrofit + 리사이클러뷰 만들기 (0) | 2021.11.09 |