Bekerja dengan Gambar

Bekerja dengan Gambar

Aspose.Cells FOSS for Java allows you to embed images directly into sel lembar kerja dan mengambil atau menghapus gambar yang ada. Gambar adalah dikelola melalui PictureCollection yang terpapar oleh masing-masing Worksheet, dan masing-masing Picture objek memberikan akses ke data gambar, jangkarnya posisi, jenis gambar yang terdeteksi dan tipe konten MIME.


Overview

Setiap lembar kerja memaparkan gambarnya melalui Worksheet.getPictures(), yang mengembalikan a PictureCollection.Anda dapat menambahkan gambar dari satu byte. array, dan InputStream, atau jalur file. Koleksi menyediakan pembantu metode untuk mendeteksi tipe gambar dari byte mentah, memecahkan file ekstensi dari data gambar, dan pemetaan eksensi ke tipe konten MIME.


Mengakses Gambar di Lembar Kerja

Dapatkan kembali PictureCollection melalui: Worksheet.getPictures().Gunakan . PictureCollection.getCount() untuk menentukan berapa banyak gambar yang hadir. Gambar individu dapat diakses dengan indeks berbasis nol melalui PictureCollection.get(index).


Menambahkan Gambar

Tiga overloads dari PictureCollection.add() tersedia, masing-masing mengembalikan indeks berbasis nol dari gambar yang baru ditambahkan:

  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, imageData) dari array byte
  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, stream) dari InputStream
  • add(upperLeftRow, upperLeftColumn, lowerRightRow, lowerRightColumn, fileName) dari jalur file
// Embed an image from bytes into cells A1:C5
byte[] imgData = Files.readAllBytes(Paths.get("logo.png"));
int idx = ws.getPictures().add(0, 0, 4, 2, imgData);

Membaca Sifat Gambar

Setelah Anda memegang sebuah Picture referensi, baca posisi jangkarnya, data gambar mentah, tipe gambar yang terdeteksi dan jenis konten MIME:

PictureCollection pics = ws.getPictures();
for (int i = 0; i < pics.getCount(); i++) {
    Picture p = pics.get(i);
    System.out.printf("Name=%s type=%s anchor=[%d,%d]-[%d,%d]%n",
        p.getName(), p.getImageType(),
        p.getUpperLeftRow(), p.getUpperLeftColumn(),
        p.getLowerRightRow(), p.getLowerRightColumn());
}

Mendeteksi tipe gambar dari Raw Bytes

Penggunaan PictureCollection.detectImageType(data) untuk menentukan ImageType nilai enum dari array byte tanpa mengemaskannya terlebih dahulu.

PictureCollection pics = ws.getPictures();
byte[] data = Files.readAllBytes(Paths.get("chart.png"));
ImageType type = pics.detectImageType(data);
String ext  = pics.extensionFromData(data);
String mime = pics.contentTypeFromExtension(ext);
System.out.printf("type=%s ext=%s mime=%s%n", type, ext, mime);

Menghapus Gambar

Penggunaan PictureCollection.removeAt(index) untuk menghapus gambar dengan indeks berbasis nol:

ws.getPictures().removeAt(0);

Tips dan Praktik Terbaik

  • Gunakan add(..., imageData) overload ketika Anda sudah memiliki byte dalam memori; gunakan overload stream untuk menghindari loading file besar sepenuhnya.
  • Call PictureCollection.detectImageType(data) untuk memvalidasi gambar format sebelum menyematkan.
  • Baris dan kolom jangkar adalah indeks berbasis nol.
  • Picture.getName() mengembalikan pengidentifikasi internal, bukan nama file asli.
  • Gambar-gambar ini disimpan pada XLSX perjalanan pulang.

Masalah Umum

IssueCausePerbaiki
getCount() mengembalikan 0 setelah penjumlahanAliran ditutup sebelum penambahan selesaiPastikan InputStream terbuka dan dapat dibaca
ImageType.UNKNOWN kembaliData gambar yang tidak didukung atau rusakVerifikasi file adalah PNG, JPEG, GIF, BMP, atau TIFF yang valid
Posisi gambar terlihat salahIndeks baris/kolom tidak benarGunakan indeks berbasis nol untuk semua parameter anchor.

FAQ

Format gambar apa yang didukung untuk embedding?

Pengelolaan ImageType enum mencakup PNG, JPEG, GIF, BMP, TIFF, dan EMF. Lainnya format dapat dimasukkan sebagai data biner tetapi memiliki ImageType dari: UNKNOWN.

Bagaimana saya mendapatkan ekstensi file dari gambar yang tertanam?

Call PictureCollection.extensionFromData(picture.getData()) dengan gambar byte mentah.

Bisakah saya mengganti data gambar yang ada?

Ya, ambil kembali. Picture melalui: get(index) dan menelepon. setData(bytes).

Bagaimana aku menemukan gambar dengan nama?

Iterate di atas semua gambar dengan getCount() dan (b) get(index) dan bandingkan Picture.getName().

Apakah gambar disimpan saat menyimpan ke format lain?

Pemuliharaan gambar tergantung pada format target. XLSX perjalanan pulang-pergi sepenuhnya didukung.


Ringkasan Referensi API

Picture

MethodJenis pengembalianDescription
getName()StringNama internal gambar.
setName(name)voidMenetapkan nama internal.
getUpperLeftRow()intBaris nol dari jangkar kiri atas.
setUpperLeftRow(row)voidMenetapkan baris jangkar kiri atas.
getUpperLeftColumn()intKolom nol dari jangkar kiri atas.
setUpperLeftColumn(col)voidMenetapkan kolom jangkar kiri atas.
getLowerRightRow()intBaris nol dari jangkar bawah kanan.
setLowerRightRow(row)voidMenetapkan baris jangkar kanan bawah.
getLowerRightColumn()intKolom nol dari jangkar kanan bawah.
setLowerRightColumn(col)voidMenetapkan kolom jangkar kanan bawah.
getImageType()ImageTypeNilai enum format gambar terdeteksi.
getData()byte[]Gambar mentah bytes.
setData(data)voidMengganti byte gambar mentah.
getContentType()StringMIME string tipe konten.

PictureCollection

MethodJenis pengembalianDescription
getCount()intJumlah gambar pada lembar kerja.
get(index)PictureMengembalikan gambar pada indeks berbasis nol.
add(...)intMenanamkan gambar; mengembalikan indeks berbasis nol.
removeAt(index)voidMenghapus gambar pada indeks berbasis nol.
detectImageType(data)ImageTypeMendeteksi format gambar dari byte mentah.
extensionFromData(data)StringMengembalikan ekstensi file untuk data gambar.
contentTypeFromExtension(ext)StringMengembalikan tipe MIME untuk ekstensi file.

See Also

 Bahasa Indonesia