Menggabungkan Layer PSD ke Layer Lain
Mengekspor Gambar ke PSD
PSD, dokumen PhotoShop, adalah format file default yang digunakan oleh Adobe Photoshop untuk bekerja dengan gambar. Aspose.PSD memungkinkan Anda untuk memuat, mengedit, dan menyimpan file ke dalam format PSD sehingga dapat dibuka dan diedit di Photoshop. Artikel ini menunjukkan cara menyimpan file ke PSD dengan Aspose.PSD, dan juga membahas beberapa pengaturan yang dapat digunakan saat menyimpan ke format ini. PsdOptions adalah kelas khusus dalam namespace ImageOptions yang digunakan untuk mengekspor gambar ke PSD. Untuk mengekspor ke PSD, buat sebuah instansi dari kelas Image, baik dimuat dari file gambar yang ada (misalnya miniatur) atau dibuat dari awal. Artikel ini menjelaskan cara melakukannya. Dalam contoh di bawah ini, sebuah gambar dibuat dari awal. Setelah dibuat dan data piksel diisi, simpan gambar menggunakan metode Save dari kelas Image, dan berikan objek PsdOptions sebagai argumen kedua. Beberapa properti kelas PsdOptions dapat diatur untuk konversi tingkat lanjut. Beberapa properti tersebut adalah ModeWarna, MetodeKompresi dan Versi. Aspose.PSD mendukung metode kompresi berikut melalui enumerasi CompressionMethod:
- CompressionMethod.Raw
- CompressionMethod.RLE
- CompressionMethod.ZipWithoutProtection
- CompressionMethod.ZipWithProtection
Mode warna berikut didukung melalui enumerasi ColorModes:
- ColorModes.Bitmap
- ColorModes.Grayscale
- ColorModes.RGB
Sumber daya tambahan dapat ditambahkan, seperti sumber daya miniatur untuk PSD v4.0, v5.0 dan yang lebih tinggi, atau grid dan panduan sumber daya untuk PSD v4.0 dan yang lebih tinggi. Kode di bawah membuat file Image dari awal, mengisi pikselnya, dan menyimpannya ke dalam PSD dengan kompresi RLE dan mode warna grayscale. Potongan kode berikut menunjukkan bagaimana cara mengekspor Gambar ke PSD.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Create a new image from scratch. | |
using (PsdImage image = new PsdImage(300, 300)) | |
{ | |
// Fill image data. | |
Graphics graphics = new Graphics(image); | |
graphics.Clear(Color.White); | |
var pen = new Pen(Color.Brown); | |
graphics.DrawRectangle(pen, image.Bounds); | |
// Create an instance of PsdOptions, Set it's various properties Save image to disk in PSD format | |
PsdOptions psdOptions = new PsdOptions(); | |
psdOptions.ColorMode = ColorModes.Rgb; | |
psdOptions.CompressionMethod = CompressionMethod.Raw; | |
psdOptions.Version = 4; | |
image.Save(dataDir + "ExportImageToPSD_output.psd", psdOptions); | |
} |
Mengimpor gambar ke lapisan PSD
Artikel ini mendemonstrasikan penggunaan Aspose.PSD untuk menambahkan atau mengimpor gambar ke lapisan PSD. API Aspose.PSD telah mengekspos metode yang efisien dan mudah digunakan untuk mencapai tujuan ini. Aspose.PSD telah mengekspos metode DrawImage dari kelas Layer untuk menambahkan/mengimpor gambar ke dalam file PSD. Metode DrawImage membutuhkan nilai lokasi dan gambar untuk menambahkan/mengimpor gambar ke dalam file PSD. Langkah-langkah untuk mengimpor gambar ke lapisan PSD adalah sebagai berikut:
- Memuat file PSD sebagai gambar menggunakan metode factory Load yang diekspos oleh kelas Image.
- Membuat sebuah instansi kelas Layer dari aliran dengan file Png, Jpeg, Tiff, Gif, Bmp, Psd, atau j2k.
- Menambahkan Layer ke Psd menggunakan metode AddLayer
- Menyimpan hasil.
Potongan kode berikut menunjukkan cara mengimpor gambar ke lapisan PSD.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
string outputFilePath = dataDir + "PsdResult.psd"; | |
var filesList = new string[] | |
{ | |
"PsdExample.psd", | |
"BmpExample.bmp", | |
"GifExample.gif", | |
"Jpeg2000Example.jpf", | |
"JpegExample.jpg", | |
"PngExample.png", | |
"TiffExample.tif", | |
}; | |
using (var image = new PsdImage(200, 200)) | |
{ | |
foreach (var fileName in filesList) | |
{ | |
string filePath = dataDir + fileName; | |
using (var stream = new FileStream(filePath, FileMode.Open)) | |
{ | |
Layer layer = null; | |
try | |
{ | |
layer = new Layer(stream); | |
image.AddLayer(layer); | |
} | |
catch (Exception e) | |
{ | |
if (layer != null) | |
{ | |
layer.Dispose(); | |
} | |
throw e; | |
} | |
} | |
} | |
image.Save(outputFilePath); | |
} |
Penggantian Warna dalam Lapisan PSD
Artikel ini mendemonstrasikan penggunaan Aspose.PSD untuk menambahkan atau mengimpor gambar ke lapisan PSD. API Aspose.PSD telah mengekspos metode yang efisien dan mudah digunakan untuk mencapai tujuan ini. Aspose.PSD telah mengekspos metode DrawImage dari kelas Layer untuk menambahkan/mengimpor gambar ke dalam file PSD. Metode DrawImage membutuhkan nilai lokasi dan gambar untuk menambahkan/mengimpor gambar ke dalam file PSD. Langkah-langkah untuk mengimpor gambar ke lapisan PSD adalah sebagai berikut:
- Memuat file PSD sebagai gambar menggunakan metode factory Load yang diekspos oleh kelas Image.
- Membuat sebuah instansi kelas Layer dan mengaitkan lapisan gambar PSD ke dalamnya.
- Memuat gambar yang perlu ditambahkan atau membuatnya dari awal.
- Memanggil metode Layer.DrawImage sambil menentukan lokasi dan instansi gambar.
- Menyimpan hasil.
Potongan kode berikut menunjukkan cara mengimpor gambar ke lapisan PSD.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Load a PSD file as an image and caste it into PsdImage | |
using (PsdImage image = (PsdImage)Image.Load(dataDir + "sample.psd")) | |
{ | |
foreach (var layer in image.Layers) | |
{ | |
if (layer.Name == "Rectangle 1") | |
{ | |
layer.HasBackgroundColor = true; | |
layer.BackgroundColor = Color.Orange; | |
} | |
} | |
image.Save(dataDir + "asposeImage02.psd"); | |
} |
Membuat Simpangan dari File PSD
PSD adalah format dokumen asli aplikasi Adobe Photoshop. Adobe Photoshop (versi 5.0 dan seterusnya) menyimpan informasi miniatur untuk tampilan pratinjau dalam blok sumber daya gambar yang terdiri dari header 28 byte awal, diikuti oleh miniatur JFIF dalam urutan RGB (merah, hijau, biru). API Aspose.PSD menyediakan mekanisme yang mudah digunakan untuk mengakses sumber daya file PSD. Sumber daya ini juga termasuk sumber miniatur yang pada akhirnya dapat diambil dan disimpan ke disk sesuai kebutuhan aplikasi. Potongan kode berikut menunjukkan bagaimana cara membuat miniatur dari File PSD.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Load a PSD file as an image and caste it into PsdImage | |
using (PsdImage image = (PsdImage)Image.Load(dataDir + "sample.psd")) | |
{ | |
int index = 0; | |
// Iterate over the PSD resources | |
foreach (var resource in image.ImageResources) | |
{ | |
index++; | |
// Check if the resource is of thumbnail type | |
if (resource is ThumbnailResource) | |
{ | |
// Retrieve the ThumbnailResource and Check the format of the ThumbnailResource | |
var thumbnail = (ThumbnailResource)resource; | |
if (thumbnail.Format == ThumbnailFormat.KJpegRgb) | |
{ | |
// Create a new image by specifying the width and height, Store the pixels of thumbnail on to the newly created image and save image | |
PsdImage thumnailImage = new PsdImage(thumbnail.Width, thumbnail.Height); | |
thumnailImage.SavePixels(thumnailImage.Bounds, thumbnail.ThumbnailData); | |
thumnailImage.Save(dataDir + "CreateThumbnailsFromPSDFiles_out_" + index.ToString() + ".bmp", new BmpOptions()); | |
} | |
} | |
} | |
} |
Membuat File PSD Indeks
Aspose.PSD untuk API .NET dapat membuat file PSD indeks dari awal. Artikel ini mendemonstrasikan penggunaan kelas PsdOptions dan PsdImage untuk membuat PSD Indeks sambil menggambar beberapa bentuk di atas kanvas yang baru dibuat. Langkah-langkah sederhana berikut diperlukan untuk membuat file PSD Indeks.
- Buat instansi PsdOptions dan atur sumbernya.
- Atur properti ColorMode dari PsdOptions ke ColorModes.Indexed.
- Buat palet warna baru dari ruang RGB dan aturnya sebagai properti Palet PsdOptions.
- Atur properti CompressionMethod ke algoritma kompresi yang dibutuhkan.
- Buat gambar PSD baru dengan memanggil metode PsdImage.Create.
- Gambar grafis atau lakukan operasi lain sesuai kebutuhan.
- Panggil metode PsdImage.Save untuk menyimpan semua perubahan.
Potongan kode berikut menunjukkan cara membuat file PSD indeks.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Create an instance of PsdOptions and set it's properties | |
var createOptions = new PsdOptions(); | |
createOptions.Source = new FileCreateSource(dataDir + "Newsample_out.psd", false); | |
createOptions.ColorMode = ColorModes.Indexed; | |
createOptions.Version = 5; | |
// Create a new color palette having RGB colors, Set Palette property & compression method | |
Color[] palette = { Color.Red, Color.Green, Color.Blue, Color.Yellow }; | |
createOptions.Palette = new PsdColorPalette(palette); | |
createOptions.CompressionMethod = CompressionMethod.RLE; | |
// Create a new PSD with PsdOptions created previously | |
using (var psd = Image.Create(createOptions, 500, 500)) | |
{ | |
// Draw some graphics over the newly created PSD | |
var graphics = new Graphics(psd); | |
graphics.Clear(Color.White); | |
graphics.DrawEllipse(new Pen(Color.Red, 6), new Rectangle(0, 0, 400, 400)); | |
psd.Save(); | |
} |
Mengekspor Layer PSD ke Gambar Raster
Aspose.PSD .NET memungkinkan Anda untuk mengekspor layer dalam file PSD ke dalam gambar raster. Silakan gunakan metode Aspose.PSD.FileFormats.Psd.Layers.Layer.Save untuk mengekspor lapisan ke gambar. Potongan kode berikut memuat file PSD dan mengekspor masing-masing layer ke gambar PNG menggunakan Aspose.PSD.FileFormats.Psd.Layers.Layer.Save. Setelah semua layer diekspor ke gambar PNG, Anda dapat membukanya menggunakan penampil gambar favorit Anda. Potongan kode berikut menunjukkan cara mengekspor lapisan PSD ke gambar raster.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Load a PSD file as an image and caste it into PsdImage | |
using (PsdImage psdImage = (PsdImage)Image.Load(dataDir + "sample.psd")) | |
{ | |
// Create an instance of PngOptions class | |
var pngOptions = new PngOptions(); | |
pngOptions.ColorType = PngColorType.TruecolorWithAlpha; | |
// Loop through the list of layers | |
for (int i = 0; i < psdImage.Layers.Length; i++) | |
{ | |
// Convert and save the layer to PNG file format. | |
psdImage.Layers[i].Save(string.Format("layer_out{0}.png", i + 1), pngOptions); | |
} | |
} |
Memperbarui Layer Teks dalam File PSD
Aspose.PSD untuk .NET memungkinkan Anda untuk memanipulasi teks dalam layer teks dari file PSD. Gunakan kelas Aspose.PSD.FileFormats.Psd.Layers.TextLayer untuk memperbarui teks dalam lapisan PSD. Potongan kode berikut memuat file PSD, mengakses layer teks, memperbarui teks, dan menyimpan file PSD dengan nama baru menggunakan metode Aspose.PSD.FileFormats.Psd.Layers.TextLayer.UpdateText.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Load a PSD file as an image and cast it into PsdImage | |
using (PsdImage psdImage = (PsdImage)Image.Load(dataDir + "layers.psd")) | |
{ | |
foreach (var layer in psdImage.Layers) | |
{ | |
if (layer is TextLayer) | |
{ | |
TextLayer textLayer = layer as TextLayer; | |
textLayer.UpdateText("test update", new Point(0, 0), 15.0f, Color.Purple); | |
} | |
} | |
psdImage.Save(dataDir + "UpdateTextLayerInPSDFile_out.psd"); | |
} |
Mendeteksi Flattened PSD
Aspose.PSD untuk .NET memungkinkan Anda untuk mendeteksi apakah file PSD yang diberikan sudah tersusun rapi atau tidak. Properti IsFlatten telah diperkenalkan dalam kelas Aspose.PSD.FileFormats.Psd.PsdImage untuk mencapai fungsi ini. Potongan kode berikut memuat file PSD dan mengakses properti IsFlatten.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Load a PSD file as an image and cast it into PsdImage | |
using (PsdImage psdImage = (PsdImage)Image.Load(dataDir + "layers.psd")) | |
{ | |
// Do processing, Get the true value if PSD is flatten and false in case the PSD is not flatten. | |
Console.WriteLine(psdImage.IsFlatten); | |
} |
Menggabungkan Layer PSD
Artikel ini menunjukkan bagaimana cara menggabungkan layer dalam file PSD saat mengonversi file PSD ke JPG dengan Aspose.PSD. Dalam contoh di bawah ini, file PSD yang ada dimuat dengan melewatkan jalur file ke metode statis Load dari kelas Image. Begitu dimuat, konversi/cetak gambar ke PsdImage. Buat instansi dari kelas JpegOptions dan atur berbagai propertinya. Sekarang panggil metode Save dari instansi PsdImage. Potongan kode berikut menunjukkan cara menggabungkan layer PSD.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Load a PSD file as an image and cast it into PsdImage | |
using (PsdImage psdImage = (PsdImage)Image.Load(dataDir + "layers.psd")) | |
{ | |
// Create JPEG option class object, Set its properties and save image | |
var jpgOptions = new JpegOptions(); | |
psdImage.Save(dataDir + "MergePSDlayers_output.jpg", jpgOptions); | |
} |
Dukungan Grayscale Dengan Alfa untuk PSD
Artikel ini menunjukkan bagaimana mendukung Grayscale dengan alfa untuk file PSD saat mengonversi file PSD ke PNG dengan Aspose.PSD. Dalam contoh di bawah ini, file PSD yang ada dimuat dengan melewatkan jalur file ke metode statis Load dari kelas Image. Setelah itu dimuat, konversi/cetak gambar ke PsdImage. Buat sebuah instansi dari kelas PngOptions dan atur berbagai propertinya. Atur properti TipeWarna ke TruecolorWithAlpha. Sekarang panggil metode Save dari instansi PngOptions. Potongan kode berikut menunjukkan cara mengonversi menjadi PNG Grayscale dengan Alfa.
Dukungan Efek Layer Untuk PSD
Artikel ini menunjukkan cara mendukung berbagai efek seperti Blur, Inner Glow, dan Outer Glow untuk layer PSD. Potongan kode berikut menunjukkan bagaimana mendukung efek layer.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
string sourceFileName = dataDir + "layers.psd"; | |
string output = dataDir + "layers.png"; | |
using (PsdImage image = (PsdImage)Image.Load(sourceFileName, | |
new ImageLoadOptions.PsdLoadOptions() | |
{ | |
LoadEffectsResource = true, | |
UseDiskForLoadEffectsResource = true | |
})) | |
{ | |
Debug.Assert(image.Layers[2] != null, "Layer with effects resource was not recognized"); | |
image.Save(output, new ImageOptions.PngOptions() | |
{ | |
ColorType = | |
FileFormats.Png | |
.PngColorType | |
.TruecolorWithAlpha | |
}); | |
} |
Dukungan Tanggal dan Waktu Pembuatan Layer
Artikel ini menunjukkan cara mendukung pembuatan layer tanggal dan waktu untuk layer PSD. Potongan kode berikut menunjukkan bagaimana membuat layer.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
string SourceName = dataDir + "OneLayer.psd"; | |
// Load a PSD file as an image and cast it into PsdImage | |
using (var im = (PsdImage)(Image.Load(SourceName))) | |
{ | |
var layer = im.Layers[0]; | |
var creationDateTime = layer.LayerCreationDateTime; | |
var expectedDateTime = new DateTime(2018, 7, 17, 8, 57, 24, 769); | |
if (expectedDateTime != creationDateTime) | |
{ | |
throw new Exception("Assertion fails"); | |
} | |
var now = DateTime.Now; | |
var createdLayer = im.AddLevelsAdjustmentLayer(); | |
// Check if Creation Date Time Updated on newly created layers | |
if (!(now <= createdLayer.LayerCreationDateTime)) | |
{ | |
throw new Exception("Assertion fails"); | |
} | |
} |
Dukungan Highlight Warna Sheet
Artikel ini menunjukkan cara memuat gambar PSD lalu mengubah dan menyorot warna lembar serta menyimpannya sebagai gambar. Potongan kode telah disediakan.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
string exportPath = dataDir + "SheetColorHighlightExampleChanged.psd"; | |
// Load a PSD file as an image and cast it into PsdImage | |
using (var im = (PsdImage)(Image.Load(sourceFileName))) | |
{ | |
var layer1 = im.Layers[0]; | |
var layer2 = im.Layers[1]; | |
if (layer1.SheetColorHighlight != SheetColorHighlightEnum.Violet || | |
layer2.SheetColorHighlight != SheetColorHighlightEnum.Orange) | |
{ | |
throw new Exception("Assertion failed"); | |
} | |
layer1.SheetColorHighlight = SheetColorHighlightEnum.Yellow; | |
im.Save(exportPath); | |
} |
Dukungan Masker Layer
Artikel ini menunjukkan bagaimana mendukung layer mask untuk gambar PSD lalu menyimpan gambar tersebut. Potongan kode telah disediakan di bawah.
Dukungan Masker Vektor Layer
Artikel ini menunjukkan Dukungan masker vektor layer untuk Aspose.PSD. Potongan kode di bawah ini menunjukkan bagaimana Aspose.PSD mendukung masker vektor layer.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
string exportPath = dataDir + "DifferentLayerMasks_Export.psd"; | |
string exportPathPng = dataDir + "DifferentLayerMasks_Export.png"; | |
// reading | |
using (PsdImage image = (PsdImage)Image.Load(sourceFileName)) | |
{ | |
// make changes to the vector path points | |
foreach (var layer in image.Layers) | |
{ | |
foreach (var layerResource in layer.Resources) | |
{ | |
var resource = layerResource as VectorPathDataResource; | |
if (resource != null) | |
{ | |
foreach (var pathRecord in resource.Paths) | |
{ | |
var bezierKnotRecord = pathRecord as BezierKnotRecord; | |
if (bezierKnotRecord != null) | |
{ | |
Point p0 = bezierKnotRecord.Points[0]; | |
bezierKnotRecord.Points[0] = bezierKnotRecord.Points[2]; | |
bezierKnotRecord.Points[2] = p0; | |
break; | |
} | |
} | |
} | |
} | |
} | |
// exporting | |
image.Save(exportPath); | |
image.Save(exportPathPng, new PngOptions() { ColorType = PngColorType.TruecolorWithAlpha }); | |
} |
Dukungan Layer Teks saat Runtime
Artikel ini menunjukkan cara menambahkan layer teks saat runtime untuk gambar PSD. Potongan kode telah disediakan di bawah.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Add color overlay layer effect at runtime | |
string sourceFileName = dataDir + "ThreeRegularLayers.psd"; | |
string exportPath = dataDir + "ThreeRegularLayersChanged.psd"; | |
var loadOptions = new PsdLoadOptions() | |
{ | |
LoadEffectsResource = true | |
}; | |
using (var im = (PsdImage)Image.Load(sourceFileName, loadOptions)) | |
{ | |
var effect = im.Layers[1].BlendingOptions.AddColorOverlay(); | |
effect.Color = Color.Green; | |
effect.Opacity = 128; | |
effect.BlendMode = BlendMode.Normal; | |
im.Save(exportPath); | |
} |
Dukungan Layer Penyesuaian
Artikel ini menunjukkan cara menyesuaikan layer dan jika layer kosong, kemudian menggabungkan layer dan menyimpannya sebagai gambar PSD. Potongan kode telah disediakan di bawah.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// The path to the documents directory. | |
string dataDir = RunExamples.GetDataDir_PSD(); | |
// Channel Mixer Adjustment Layer | |
string sourceFileName1 = dataDir + "ChannelMixerAdjustmentLayer.psd"; | |
string exportPath1 = dataDir + "ChannelMixerAdjustmentLayerChanged.psd"; | |
using (var im = (PsdImage)(Image.Load(sourceFileName1))) | |
{ | |
for (int i = 0; i < im.Layers.Length; i++) | |
{ | |
var adjustmentLayer = im.Layers[i] as AdjustmentLayer; | |
if (adjustmentLayer != null) | |
{ | |
adjustmentLayer.MergeLayerTo(im.Layers[0]); | |
} | |
} | |
// Save PSD | |
im.Save(exportPath1); | |
} | |
// Levels adjustment layer | |
var sourceFileName2 =dataDir+ "LevelsAdjustmentLayerRgb.psd"; | |
var exportPath2 = dataDir + "LevelsAdjustmentLayerRgbChanged.psd"; | |
using (var im = (PsdImage)(Image.Load(sourceFileName2))) | |
{ | |
for (int i = 0; i < im.Layers.Length; i++) | |
{ | |
var adjustmentLayer = im.Layers[i] as AdjustmentLayer; | |
if (adjustmentLayer != null) | |
{ | |
adjustmentLayer.MergeLayerTo(im.Layers[0]); | |
} | |
} | |
// Save PSD | |
im.Save(exportPath2); | |
} |
Mengelola Kecerahan dan Kontras dalam Layer Penyesuaian
Artikel ini menunjukkan bagaimana merubah layer dan mengatur kecerahan serta kontras dalam layer lalu menyimpannya sebagai gambar PSD. Potongan kode telah disediakan di bawah.
// For complete examples and data files, please go to https://github.com/aspose-psd/Aspose.PSD-for-.NET | |
// Brightness/Contrast layer editing | |
string sourceFileName = dataDir + "BrightnessContrastModern.psd"; | |
string psdPathAfterChange = dataDir + "BrightnessContrastModernChanged.psd"; | |
using (var im = (PsdImage)Image.Load(sourceFileName)) | |
{ | |
foreach (var layer in im.Layers) | |
{ | |
if (layer is BrightnessContrastLayer) | |
{ | |
var brightnessContrastLayer = (BrightnessContrastLayer)layer; | |
brightnessContrastLayer.Brightness = 50; | |
brightnessContrastLayer.Contrast = 50; | |
} | |
} | |
// Save PSD | |
im.Save(psdPathAfterChange); | |
} |
Mengelola Layer Paparan
Artikel ini menunjukkan bagaimana menambahkan dan mengedit layer paparan lalu mengelola layer paparan lalu menyimpannya sebagai gambar PSD. Potongan kode telah disediakan