Dithering untuk Gambar Raster
Dithering adalah teknik untuk menciptakan ilusi warna dan bayangan baru dengan memvariasikan pola titik yang sebenarnya membuat sebuah gambar. Ini adalah cara paling umum untuk mengurangi rentang warna gambar menjadi 256 (atau kurang) warna. Aspose.PSD menyediakan dukungan dithering untuk kelas RasterImage dengan mengenalkan metode Dither yang menerima dua parameter. Pertama adalah tipe DitheringMethod yang akan diterapkan dengan dua opsi yang mungkin, yaitu FloydSteinbergDithering dan ThresholdDithering. Parameter kedua untuk metode Dither adalah BitCount dalam bentuk integer. BitCount menentukan ukuran sampel untuk hasil dithering. Nilai defaultnya adalah 1 yang mewakili hitam dan putih, sedangkan nilai yang diperbolehkan adalah 1, 4, 8 yang menghasilkan palet dengan 2, 4, dan 256 warna secara berturut-turut.
String dataDir = Utils.getDataDir(DitheringforRasterImages.class) + "DrawingAndFormattingImages/"; | |
String sourceFile = dataDir + "sample.psd"; | |
String destName = dataDir + "SampleImage_out.bmp"; | |
// Load an existing image into an instance of RasterImage class | |
try (PsdImage image = (PsdImage) Image.load(sourceFile)) { | |
// Peform Floyd Steinberg dithering on the current image and Save the resultant image | |
image.dither(DitheringMethod.ThresholdDithering, 4); | |
image.save(destName, new BmpOptions()); | |
} |
Mengatur Kecerahan, Kontras, dan Gamma
Penyesuaian warna pada gambar digital adalah salah satu fitur inti yang banyak diberikan oleh perpustakaan pengolahan gambar. Penyesuaian warna dapat dikategorikan sebagai berikut.
- Kecerahan mengacu pada kecerahan atau kegelapan warna. Meningkatkan kecerahan gambar akan menerangi semua warna sementara mengurangi kecerahan akan membuat warna menjadi lebih gelap.
- Kontras mengacu pada membuat objek atau detail dalam gambar lebih jelas. Meningkatkan kontras gambar akan meningkatkan perbedaan antara area terang dan gelap sehingga area terang menjadi lebih terang dan area gelap menjadi lebih gelap. Menurunkan kontras akan membuat area terang dan gelap tetap hampir sama tetapi gambar secara keseluruhan menjadi lebih homogen.
- Gamma mengoptimalkan kontras dan kecerahan pencahayaan tidak langsung yang menerangi suatu objek dalam gambar.
Mengatur Kecerahan
Aspose.PSD untuk Java API menyediakan metode AdjustBrightness untuk kelas RasterImage yang dapat digunakan untuk menyesuaikan kecerahan gambar dengan melewati nilai integer sebagai parameter. Nilai parameter tertinggi menandakan gambar yang lebih cerah. Berikut adalah gambar asli dan gambar hasilnya untuk perbandingan.
String dataDir = Utils.getDataDir(AdjustingBrightness.class) + "DrawingAndFormattingImages/"; | |
String sourceFile = dataDir + "sample.psd"; | |
String destName = dataDir + "AdjustBrightness_out.tiff"; | |
// Load an existing image into an instance of RasterImage class | |
try (Image image = Image.load(sourceFile); | |
// Cast object of Image to RasterImage | |
RasterImage rasterImage = (RasterImage) image) { | |
// Check if RasterImage is cached and Cache RasterImage for better performance | |
if (!rasterImage.isCached()) { | |
rasterImage.cacheData(); | |
} | |
// Adjust the brightness | |
rasterImage.adjustBrightness(-50); | |
int[] ushort = {8, 8, 8}; | |
// Create an instance of TiffOptions for the resultant image, Set various properties for the object of TiffOptions and Save the resultant image | |
TiffOptions tiffOptions = new TiffOptions(TiffExpectedFormat.Default); | |
tiffOptions.setBitsPerSample(ushort); | |
tiffOptions.setPhotometric(TiffPhotometrics.Rgb); | |
rasterImage.save(destName, tiffOptions); | |
} |
Mengatur Kontras
Metode AdjustContrast yang terpapar oleh kelas RasterImage dapat digunakan untuk menyesuaikan Kontras gambar dengan melewati nilai float sebagai parameter.
Nilai parameter tertinggi menandakan kontras yang lebih tinggi dalam gambar yang diberikan. Berikut adalah gambar asli dan gambar hasilnya untuk perbandingan.
String dataDir = Utils.getDataDir(AdjustingContrast.class) + "DrawingAndFormattingImages/"; | |
String sourceFile = dataDir + "sample.psd"; | |
String destName = dataDir + "AdjustContrast_out.tiff"; | |
// Load an existing image into an instance of RasterImage class | |
try (Image image = Image.load(sourceFile); | |
// Cast object of Image to RasterImage | |
RasterImage rasterImage = (RasterImage) image) { | |
// Check if RasterImage is cached and Cache RasterImage for better performance | |
if (!rasterImage.isCached()) { | |
rasterImage.cacheData(); | |
} | |
// Adjust the contrast | |
rasterImage.adjustContrast(50); | |
// Create an instance of TiffOptions for the resultant image, Set various properties for the object of TiffOptions and Save the resultant image to TIFF format | |
TiffOptions tiffOptions = new TiffOptions(TiffExpectedFormat.Default); | |
int[] ushort = {8, 8, 8}; | |
tiffOptions.setBitsPerSample(ushort); | |
tiffOptions.setPhotometric(TiffPhotometrics.Rgb); | |
rasterImage.save(destName, tiffOptions); | |
} |
Mengatur Gamma
Metode AdjustGamma yang terpapar oleh kelas RasterImage memiliki dua versi. Salah satu overloading menerima satu nilai float dan melakukan koreksi Gamma untuk koefisien kanal merah, biru, dan hijau. Sementara overloading lain menerima tiga parameter float yang mewakili masing-masing koefisien warna secara terpisah. Contoh kode berikut mendemonstrasikan bagaimana Mengatur Gamma pada sebuah gambar.
String dataDir = Utils.getDataDir(AdjustingGamma.class) + "DrawingAndFormattingImages/"; | |
String sourceFile = dataDir + "sample.psd"; | |
String destName = dataDir + "AdjustGamma_out.tiff"; | |
// Load an existing image into an instance of RasterImage class | |
try (Image image = Image.load(sourceFile); | |
// Cast object of Image to RasterImage | |
RasterImage rasterImage = (RasterImage) image) { | |
// Check if RasterImage is cached and Cache RasterImage for better performance | |
if (!rasterImage.isCached()) { | |
rasterImage.cacheData(); | |
} | |
// Adjust the gamma | |
rasterImage.adjustGamma(2.2f, 2.2f, 2.2f); | |
// Create an instance of TiffOptions for the resultant image, Set various properties for the object of TiffOptions and Save the resultant image to TIFF format | |
TiffOptions tiffOptions = new TiffOptions(TiffExpectedFormat.Default); | |
int[] ushort = {8, 8, 8}; | |
tiffOptions.setBitsPerSample(ushort); | |
tiffOptions.setPhotometric(TiffPhotometrics.Rgb); | |
rasterImage.save(destName, tiffOptions); | |
} |
Berkabutkan Gambar
Artikel ini menunjukkan penggunaan Aspose.PSD untuk Java untuk melakukan efek Blur pada sebuah gambar. API Aspose.PSD telah mengekspos metode yang efisien dan mudah digunakan untuk mencapai tujuan ini. Aspose.PSD untuk Java telah mengekspos kelas GaussianBlurFilterOptions untuk membuat efek blur secara langsung. Kelas GaussianBlurFilterOptions memerlukan nilai radius dan sigma untuk membuat efek blur pada sebuah gambar. Langkah-langkah untuk melakukan Resize sangat sederhana seperti di bawah ini:
- Memuat gambar menggunakan metode pabrik Load yang terpapar oleh kelas Image.
- Mengonversi gambar menjadi RasterImage.
- Membuat sebuah instance dari kelas GaussianBlurFilterOptions dengan konstruktor default atau memberikan nilai radius dan sigma dalam konstruktor.
- Memanggil metode RasterImage.Filter sambil menentukan persegi panjang sebagai batas gambar dan instance kelas GaussianBlurFilterOptions.
- Menyimpan hasilnya.
Contoh kode berikut mendemonstrasikan bagaimana membuat efek blur pada sebuah gambar.
String dataDir = Utils.getDataDir(BlurAnImage.class) + "DrawingAndFormattingImages/"; | |
String sourceFile = dataDir + "sample.psd"; | |
String destName = dataDir + "BlurAnImage_out.gif"; | |
// Load an existing image into an instance of RasterImage class | |
try (Image image = Image.load(sourceFile)) { | |
// Convert the image into RasterImage, | |
//Pass Bounds[rectangle] of image and GaussianBlurFilterOptions instance to Filter method and Save the results | |
RasterImage rasterImage = (RasterImage) image; | |
rasterImage.filter(rasterImage.getBounds(), new GaussianBlurFilterOptions(15, 15)); | |
rasterImage.save(destName, new GifOptions()); | |
} |
Memverifikasi Transparansi Gambar
Artikel ini menunjukkan penggunaan Aspose.PSD untuk Java untuk memeriksa transparansi gambar. Langkah-langkah untuk memeriksa transparansi gambar sangat sederhana seperti di bawah ini:
- Memuat gambar menggunakan metode pabrik Load yang terpapar oleh kelas Image.
- Memeriksa keopakan gambar jika opasitas adalah nol, gambar tersebut transparan.
- Contoh kode berikut mendemonstrasikan bagaimana memeriksa apakah gambar transparan atau tidak.
String dataDir = Utils.getDataDir(VerifyImageTransparency.class) + "DrawingAndFormattingImages/"; | |
String sourceFile = dataDir + "sample.psd"; | |
String destName = dataDir + "AdjustBrightness_out.tiff"; | |
// Load an existing image into an instance of RasterImage class | |
try (PsdImage image = (PsdImage) Image.load(sourceFile)) { | |
float opacity = image.getImageOpacity(); | |
System.out.println(opacity); | |
if (opacity == 0) { | |
// The image is fully transparent. | |
} | |
} |
Menerapkan Kompresor GIF yang Bersifat Hilang
Dengan menggunakan Aspose.PSD untuk Java, pengembang dapat mengatur perbedaan piksel. Kompresi GIF didasarkan pada “kamus” dari rangkaian string piksel yang dilihat. Pengenkoder normal mencari kamus untuk rangkaian string piksel terpanjang yang tepat cocok dengan piksel dalam gambar. Pengenkoder yang bersifat hilang memilih rangkaian string piksel terpanjang yang “cukup mirip” dengan piksel dalam gambar. Di bawah ini adalah demonstrasi kode dari fungsionalitas tersebut.
String dataDir = Utils.getDataDir(ImplementLossyGIFCompressor.class) + "DrawingAndFormattingImages/"; | |
String sourceFile = dataDir + "sample.psd"; | |
String destName = dataDir + "anim_lossy-200.gif"; | |
// Load an existing image into an instance of RasterImage class | |
try (Image image = Image.load(sourceFile)) { | |
GifOptions gifExport = new GifOptions(); | |
gifExport.setMaxDiff(80); | |
image.save(dataDir + "anim_lossy-80.gif", gifExport); | |
gifExport.setMaxDiff(200); | |
image.save(destName, gifExport); | |
} |
Menerapkan Resampling Bicubic
Resampling berarti Anda mengubah dimensi piksel sebuah gambar. Ketika Anda menyusutkan, Anda menghilangkan piksel dan oleh karena itu menghapus informasi dan detail dari gambar Anda. Saat Anda memperbesar, Anda menambahkan piksel. Photoshop menambahkan piksel ini dengan menggunakan interpolasi. Artikel ini mendemonstrasikan bagaimana Anda dapat melakukan Resampling Bicubic dengan menggunakan Aspose.PSD untuk Java.
Di bawah ini adalah demonstrasi kode dari fungsionalitas tersebut.
String dataDir = Utils.getDataDir(ImplementBicubicResampler.class) + "DrawingAndFormattingImages/"; | |
String filePath = dataDir + "sample_bicubic.psd"; | |
String destNameCubicConvolution = dataDir + "ResamplerCubicConvolutionStripes_after.psd"; | |
try (PsdImage image = (PsdImage) Image.load(filePath)) { | |
image.resize(300, 300, ResizeType.CubicConvolution); | |
image.save(destNameCubicConvolution, new PsdOptions(image)); | |
String destNameBell = dataDir + "ResamplerBellStripes_after.psd"; | |
} | |
try (PsdImage imageBellStripes = (PsdImage) Image.load(filePath)) { | |
imageBellStripes.resize(300, 300, ResizeType.Bell); | |
imageBellStripes.save(destNameCubicConvolution, new PsdOptions(imageBellStripes)); | |
} |
Lapisan Penyesuaian Melawanin
Artikel ini menunjukkan cara Anda dapat melaksanakan lapisan penyesuaian melawanin dengan menggunakan Aspose.PSD untuk Java. Sebuah lapisan penyesuaian adalah jenis lapisan khusus yang digunakan terutama untuk koreksi warna. Daripada memiliki konten mereka sendiri, mereka menyesuaikan informasi pada lapisan di bawahnya. Lapisan penyesuaian melawanin membuat efek gambar negatif dengan membalikkan warna dalam sebuah gambar.
Di bawah ini adalah demonstrasi kode dari fungsionalitas tersebut.
String dataDir = Utils.getDataDir(InvertAdjustmentLayer.class) + "DrawingAndFormattingImages/"; | |
String filePath = dataDir + "InvertStripes_before.psd"; | |
String outputPath = dataDir + "InvertStripes_after.psd"; | |
try (PsdImage im = (PsdImage) Image.load(filePath)) { | |
im.addInvertAdjustmentLayer(); | |
im.save(outputPath); | |
} |