Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีแปลงรูปภาพเป็น Base64 String ใน Android

ภาพรวม

บทความนี้สาธิตวิธีแปลงไฟล์รูปภาพ (Image) เป็นสตริง Base64 ในแอป Android ซึ่งเป็นเทคนิคที่ใช้บ่อยสำหรับการส่งรูปภาพผ่าน API, จัดเก็บในฐานข้อมูล หรือแชร์ข้อมูลระหว่างระบบ

ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่

สร้างโปรเจกต์ Android ใหม่ใน Android Studio ด้วย Empty Activity

ขั้นตอนที่ 2: ออกแบบ Layout (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="8dp"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_centerInParent="true"
        android:textSize="12sp"
        android:textStyle="bold" />

</RelativeLayout>

ขั้นตอนที่ 3: เขียนโค้ด MainActivity (src/MainActivity.java)

import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.util.Base64;
import android.widget.TextView;
import java.io.ByteArrayOutputStream;

public class MainActivity extends AppCompatActivity {

    TextView textView;

    @SuppressLint("WrongThread")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = findViewById(R.id.textView);

        // โหลดรูปจาก drawable resources
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.instaimage);
        
        // บีบอัดรูปเป็น JPEG คุณภาพ 100%
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
        
        // แปลงเป็น byte array แล้ว encode เป็น Base64
        byte[] imageBytes = byteArrayOutputStream.toByteArray();
        String imageString = Base64.encodeToString(imageBytes, Base64.DEFAULT);
        
        textView.setText(imageString);
    }
}

ขั้นตอนที่ 4: AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="https://schemas.android.com/apk/res/android"
    package="app.com.sample">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

การทดสอบและผลลัพธ์

รันแอปบนอุปกรณ์จริง → TextView จะแสดงสตริง Base64 ของรูปภาพที่ยาวมาก (สามารถคัดลอกไปใช้งานได้)

เทคนิคเพิ่มเติม

  • แปลงกลับจาก Base64 เป็น Bitmap: ใช้ Base64.decode() และ BitmapFactory.decodeByteArray()
  • ปรับขนาดรูปก่อน Encode: ใช้ Bitmap.createScaledBitmap() เพื่อลดขนาดข้อมูล
  • รองรับ Uri จาก Gallery: ใช้ ContentResolver.openInputStream() โหลดรูปจาก URI
  • Thread Safety: ควรทำงานใน Background Thread (Coroutine/RxJava) สำหรับรูปขนาดใหญ่

กรณีการใช้งานจริง

  • อัปโหลดรูปภาพไป Server ผ่าน JSON API
  • จัดเก็บรูปภาพใน SQLite/Room Database
  • แชร์รูปภาพระหว่างแอปผ่าน Intent
  • Cache รูปภาพใน SharedPreferences ชั่วคราว