cari

Imagick vs Gd

Feb 22, 2025 am 09:26 AM

Imagick vs GD

mata utama

    GD dan ImageMagick adalah perpustakaan pemprosesan imej PHP yang popular.
  • Dari segi prestasi, tidak ada kelebihan dan kekurangan mutlak antara kedua -dua, dan kelajuan bergantung kepada senario aplikasi tertentu.
  • Gaya pengekodan adalah penting.
  • Di samping kedua -dua perpustakaan ini, terdapat pilihan lain, seperti platform pemprosesan imej awan atau komponen yang telah diintegrasikan ke dalam aplikasi.

Pengenalan

Dalam aplikasi PHP, jika anda perlu membuat gambar kecil, gunakan penapis imej, atau lakukan penukaran imej lain, anda perlu menggunakan perpustakaan pemprosesan imej. Biasanya, anda akan memilih GD atau ImageMagick. Tetapi perpustakaan mana yang menyokong lebih banyak format imej? Perpustakaan mana yang lebih cepat? Apakah faktor lain yang perlu dipertimbangkan semasa memilih perpustakaan yang betul? Artikel ini akan menjawab soalan -soalan ini!

Ketersediaan

GD dan ImageMagick boleh didapati di PHP, dengan syarat ia dipasang dan dikonfigurasikan dengan PHP sendiri. Perpustakaan GD dimasukkan secara lalai bermula dengan PHP 4.3, jadi ia boleh didapati di kebanyakan persekitaran pelayan. Sebaliknya, Imagemagick tidak selalu tersedia dan beberapa syarikat hosting tidak menawarkannya.

Anda boleh menjalankan beberapa baris kod untuk memeriksa ketersediaan kedua -dua perpustakaan ini. Fungsi ImageMagick

dan GD queryFormats() juga boleh menyenaraikan format imej yang disokong oleh setiap perpustakaan: gd_info()

if (extension_loaded('gd')) {
    print_r(gd_info());
} else {
    echo 'GD不可用。';
}

if (extension_loaded('imagick')) {
    $imagick = new Imagick();
    print_r($imagick->queryFormats());
} else {
    echo 'ImageMagick不可用。';
}

Jenis fail yang disokong

Senarai format imej yang disokong dicetak selepas melaksanakan kod di atas terlebih dahulu menunjukkan bahawa fungsi Perpustakaan ImageMagick jauh melebihi GD. GD hanya menyokong fail JPG, PNG, GIF, WBMP, WEBP, XBM dan XPM, dan nombornya sangat terhad berbanding dengan lebih daripada seratus jenis fail yang diproses oleh Perpustakaan ImageMagick.

Anda mungkin fikir anda mungkin tidak pernah menggunakan semua format yang tidak biasa ini yang disokong oleh ImageMagick, tetapi itu mungkin tidak berlaku. Dalam salah satu projek saya, saya terpaksa beralih dari GD ke ImageMagick, semata -mata kerana GD tidak menyokong fail TIFF.

Fungsi

GD dan ImageMagick kedua -duanya menyediakan beberapa fungsi asas, seperti: mengubah saiz dan menanam imej, mencipta imej yang terdiri daripada bentuk tersuai, teks dan fail imej lain, menggunakan penapis imej (mengubah kecerahan, kontras, teduhan, dan lain -lain).

Jika anda ingin memproses imej lebih maju, lihat semua ciri Perpustakaan ImageMagick. Seperti yang ditunjukkan dalam halaman Contoh ImageMagick - yang pertama dan kedua - anda boleh menukar, menghias, atau memutarbelitkan imej dengan banyak cara.

PHP ImageMagick Class sendiri menyediakan 331 kaedah, yang merupakan jumlah yang cukup besar (tidak, saya tidak menghitung secara manual, saya menggunakan

;)). Di satu pihak, ia menunjukkan kuasa Perpustakaan Imagemagick, dan sebaliknya, ia juga menjadikannya sukar untuk mencari dan melaksanakan kaedah yang sesuai untuk kes -kes penggunaan tertentu. ReflectionClass

Prestasi

Sejujurnya, jika anda hanya ingin membuat satu set gambar kecil atau memohon transformasi mudah ke imej, anda tidak perlu mengambil berat tentang membandingkan prestasi setiap perpustakaan pemprosesan imej.

Dalam satu siri ujian yang saya lakukan dengan konfigurasi pelayan biasa, membuat gambar kecil dari imej JPG kamera digital 3MB, ia mengambil masa kira -kira 0.6 saat untuk menggunakan ImageMagick dan kira -kira 0.5 saat untuk menggunakan GD. Jadi, tidak kira perpustakaan yang anda gunakan, keseluruhan proses tidak akan mengambil banyak masa. Selepas melayari web dan mencari ujian kelajuan untuk kedua -dua perpustakaan, anda akan mendapati dengan cepat bahawa mereka tidak dapat menonjol dari segi prestasi. Kadang -kadang perpustakaan GD berjalan lebih cepat, kadang -kadang ia adalah Imagemagick - semuanya terpulang kepada kes penggunaan. Jangan anggap standard ini sebagai faktor utama apabila memutuskan sama ada menggunakan GD atau ImageMagick.

gaya pengekodan

Jika anda membandingkan kod penukaran imej yang sama yang ditulis menggunakan perpustakaan GD dan ImageMagick, anda akan dengan cepat melihat beberapa perbezaan di antara mereka. Perpustakaan GD disediakan melalui satu siri fungsi seperti getimagesize() atau imagecreatetruecolor(), jadi keseluruhan skrip pemprosesan imej perlu ditulis dalam gaya prosedur. Mari kita lihat contoh membuat gambar kecil jpg imej:

if (extension_loaded('gd')) {
    print_r(gd_info());
} else {
    echo 'GD不可用。';
}

if (extension_loaded('imagick')) {
    $imagick = new Imagick();
    print_r($imagick->queryFormats());
} else {
    echo 'ImageMagick不可用。';
}

Oleh kerana tiada pengecualian dilemparkan apabila ralat berlaku, semua pengendalian ralat mesti dicapai dengan memeriksa hasil setiap fungsi GD. Anda juga perlu berurusan dengan fungsi besar dengan sepuluh parameter, seperti imagecopyresampled() atau imagecopyresized(). Saya percaya bahawa begitu banyak parameter bukan contoh amalan pengekodan yang baik.

Satu lagi perkara yang mungkin kurang mudah ialah fungsi membaca dan menyimpan imej berbeza -beza bergantung pada jenis imej. Oleh itu, jika anda mahu skrip generasi kecil anda mengendalikan jenis fail yang berbeza, anda perlu menambah kod berikut:

$src_img = imagecreatefromjpeg('source.jpg');
if (!$src_img) {
    die('读取源图像时出错。');
}
$thumbnail = imagecreatetruecolor(800, 800);
if (!$thumbnail) {
    die('创建目标图像时出错。');
}
$result = imagecopyresampled($thumbnail, $src_img, 0, 0, 0, 0, 800, 800, 1600, 1600);
if (!$result) {
    die('生成缩略图时出错。');
}
$result = imagejpeg($thumbnail, 'destination.jpg');
if (!$result) {
    die('保存缩略图时出错。');
}
$result = imagedestroy($thumbnail);
if (!$result) {
    die('销毁图像时出错。');
}

maka anda perlu melaksanakan fungsi yang berbeza mengikut jenis imej untuk menyimpan imej sasaran dalam format yang betul. Seperti yang anda dapat lihat, kod GD dengan cepat akan menjadi rumit.

Cukup periksa kod ImageMagick yang bertanggungjawab untuk operasi yang sama dan anda akan melihat perbezaannya:

switch ($image_type) {
    case 'gif':
        $src_img = imagecreatefromgif($path);
        break;
    case 'png':
        $src_img = imagecreatefrompng($path);
        break;
    case 'jpg':
    case 'jpeg':
        $src_img = imagecreatefromjpeg($path);
        break;
    default:
        return false;
        break;
}

//继续创建缩略图

Perpustakaan ImageMagick boleh diakses melalui kelas Imagik. Oleh itu, kita boleh mendapat manfaat daripada semua kelebihan paradigma pengaturcaraan berorientasikan objek. Contoh yang paling mudah adalah bagaimana menangani kesilapan. Apabila menggunakan Perpustakaan ImageMagick, anda hanya membungkus semua kod anda dalam blok percubaan dan aplikasi anda boleh dilaksanakan dengan selamat.

Seperti yang ditunjukkan di atas, skrip ImageMagick yang bertanggungjawab untuk membuat gambar kecil tidak mengandungi sebarang kod yang berkaitan dengan jenis imej sumber. Kod yang sama boleh digunakan untuk memproses imej JPG serta fail PNG atau TIF. Sekiranya anda perlu menukar imej sumber ke jenis lain, tambahkan garis kod sebelum melaksanakan kaedah writeImage():

try {
    $imagick = new Imagick();
    $imagick->readImage('source.jpg');
    $imagick->thumbnailImage(800, 800);
    $imagick->writeImage('destination.jpg');
} catch (Exception $e) {
    die('创建缩略图时出错:' . $e->getMessage());
}

Adakah lebih jelas? Pada pendapat saya, menggunakan fungsi perpustakaan GD untuk memproses imej tidak mudah seperti Imagemagick. Sudah tentu, GD mempunyai beberapa pembalut yang tersedia untuk menjadikannya berorientasikan objek, tetapi pada masa ini ia mula berasa seperti penampalan.

Populariti

Oleh kerana perpustakaan GD dimasukkan ke dalam semua versi PHP baru secara lalai, anda mungkin melihat perpustakaan ini lebih kerap dalam pelbagai projek daripada ImageMagick. Apabila projek CakePHP saya memerlukan komponen yang bertanggungjawab untuk mengendalikan muat naik imej dan generasi kecil, saya dengan cepat menemui komponen berdasarkan GD yang sesuai dengan keperluan saya. Anda kadang-kadang boleh menemui beberapa modul yang ditulis dengan baik yang membolehkan anda memilih antara dua perpustakaan pemprosesan imej-seperti Perpustakaan Imej Rangka Kerja Kohana, tetapi saya bimbang bahawa mereka tidak biasa.

Alternatif

Anda tidak perlu berpegang dengan perpustakaan PHP tertentu apabila memutuskan cara memproses pemprosesan imej dalam aplikasi anda. Terdapat penyelesaian lain yang patut dipertimbangkan:

  1. Gunakan skrip pemprosesan imej yang berjalan di luar aplikasi PHP. Dalam salah satu aplikasi saya, saya perlu membuat laman web yang membolehkan pelawat menukar imej dalam talian, betul -betul di tetingkap penyemak imbas. Saya memutuskan untuk menggunakan perpustakaan pemprosesan imej caman.js JavaScript dan ia melakukan pekerjaan yang hebat. Perpustakaan ini juga boleh digunakan sebagai skrip latar belakang yang tertanam dalam platform Node.js, yang semakin meningkat populariti.

  2. Gunakan platform pemprosesan imej berasaskan awan. Penyelesaian berasaskan awan boleh melakukan tugas untuk anda - selepas menghantar fail sumber, anda boleh mendapatkan gambar kecil dari saiz atau imej yang berbeza yang ditukar melalui pelbagai penapis. Anda tidak perlu menulis terlalu banyak kod dan ia tidak terhad oleh keupayaan pelayan. Hanya buka Google dan cari beberapa syarikat yang menawarkan perkhidmatan sedemikian.

  3. Semak fungsi komponen yang anda gunakan. Anda mungkin terkejut mendapati bahawa anda boleh menukar imej anda dengan menggunakan perkhidmatan yang sudah disambungkan ke aplikasi anda. Sebagai contoh, API Dropbox menyediakan kaedah kecil yang membolehkan anda mendapatkan imej JPG atau PNG dalam salah satu daripada lima saiz yang tersedia. Semak dokumentasi untuk perpustakaan dan API anda dan anda mungkin mendapati bahawa mereka boleh melakukan apa yang anda perlukan.

Ringkasan

seperti yang anda lihat, setiap perpustakaan pemprosesan imej mempunyai kelebihan dan kekurangannya. Perpustakaan GD tersedia secara meluas, jadi ia boleh berfungsi di mana -mana sahaja. Oleh kerana ia sangat popular, mudah bagi anda untuk mencari banyak contoh dan komponen yang menggunakan perpustakaan ini. Mendapatkan bantuan juga lebih mudah, kerana lebih banyak orang mungkin biasa dengan perpustakaan GD daripada ImageMagick.

ImageMagick menyokong lebih banyak jenis fail dan boleh menukar imej dengan lebih banyak cara daripada perpustakaan GD. Ia juga membolehkan anda menulis kod kualiti yang lebih jelas dan lebih tinggi.

Akhirnya, terdapat alternatif lain, seperti perkhidmatan pemprosesan imej awan, yang mungkin menghapuskan keperluan untuk kedua -dua perpustakaan. Saya harap artikel ini membantu anda membuat pilihan anda.

Jika anda mempunyai sebarang pertanyaan atau komen mengenai artikel ini, sila hubungi saya di bawah atau hubungi saya melalui Google.

FAQ untuk Imagick dan GD

Apakah perbezaan utama antara Imagick dan GD dari segi fungsi?

Imagick dan GD adalah kedua -dua perpustakaan yang kuat untuk pemprosesan imej dalam PHP. Walau bagaimanapun, mereka berbeza dengan ketara dalam fungsi mereka. Dikenali dengan set ciri yang luas, Imagick menawarkan pelbagai pilihan pemprosesan imej, termasuk ciri -ciri canggih seperti kesan lapisan, penapis imej, dan pelarasan warna. GD, sebaliknya, adalah lebih mudah dan mudah, memberi tumpuan kepada tugas pemprosesan imej asas seperti saiz semula, tanaman, dan keupayaan lukisan mudah. Walaupun GD mungkin cukup untuk mencapai tugas mudah, Imagick sering menjadi pilihan pertama untuk keperluan pemprosesan imej yang lebih kompleks.

Bagaimanakah Imagick dan GD membandingkan dari segi prestasi?

Prestasi mungkin berbeza mengikut persekitaran tugas dan pelayan. Secara umumnya, Imagick dianggap mengambil lebih banyak sumber daripada GD kerana set ciri yang luas. Walau bagaimanapun, ia juga cenderung menghasilkan hasil yang lebih tinggi, terutamanya apabila berurusan dengan tugas pemprosesan imej yang kompleks. GD, sebaliknya, biasanya lebih cepat dan menggunakan sumber yang kurang, menjadikannya pilihan yang baik untuk tugas mudah atau persekitaran dengan sumber yang terhad.

Mana yang lebih baik, Imagick atau GD, lebih baik untuk memproses imej besar?

Imagick biasanya lebih sesuai untuk bekerja dengan imej besar. Ini kerana Imagick menyokong ciri yang dipanggil "cache piksel berasaskan cakera", yang membolehkannya memproses imej yang lebih besar daripada memori yang tersedia. GD, sebaliknya, tidak menyokong ciri ini, jadi anda boleh mengalami kesukaran ketika bekerja dengan imej besar, terutama pada pelayan dengan memori yang terhad.

Bagaimanakah IMAGICK dan GD mengendalikan ketelusan?

kedua -dua Imagick dan GD menyokong ketelusan, tetapi mereka mengendalikan ketelusan sedikit berbeza. Imagick menyokong pelbagai pilihan ketelusan, termasuk saluran alfa dan pelbagai mod hibrid. Sebaliknya, GD mempunyai sokongan yang lebih terhad untuk ketelusan, dan kadang -kadang sukar untuk menangani kesan ketelusan yang kompleks.

Bolehkah saya menggunakan Imagick dan GD dalam projek yang sama?

Ya, Imagick dan GD boleh digunakan serentak dalam projek yang sama. Walau bagaimanapun, adalah penting untuk diperhatikan bahawa kedua -dua perpustakaan ini menggunakan nama sintaks dan fungsi yang berbeza, jadi anda perlu memastikan kod anda serasi dengan kedua -duanya. Di samping itu, menggunakan kedua -dua perpustakaan dalam projek yang sama dapat meningkatkan kerumitan kod dan boleh menyebabkan masalah prestasi, jadi umumnya disyorkan untuk memilih salah satu dari mereka jika mungkin.

Perpustakaan mana yang mempunyai sokongan yang lebih luas: Imagick atau GD?

kedua -dua Imagick dan GD disokong secara meluas dan diselenggarakan secara aktif. Walau bagaimanapun, GD dimasukkan secara lalai dalam kebanyakan pemasangan PHP, menjadikannya lebih banyak tersedia secara universal. Sebaliknya, Imagick biasanya perlu dipasang secara berasingan, yang kadang -kadang boleh menyebabkan masalah keserasian.

Bagaimanakah Imagick dan GD membandingkan dari segi dokumentasi dan sokongan komuniti?

Imagick dan GD mempunyai dokumentasi yang luas dan sokongan komuniti aktif. Walau bagaimanapun, disebabkan oleh sejarahnya yang lebih panjang dan penggunaan yang lebih luas, GD sering mempunyai sumber dan tutorial yang lebih siap sedia dalam talian. Walaupun Imagick mempunyai dokumentasi yang baik, ia mungkin mengambil lebih banyak penggalian untuk mencari penyelesaian atau contoh tertentu.

Adakah terdapat masalah keselamatan dengan Imagick atau GD?

kedua -dua Imagick dan GD dianggap perpustakaan yang selamat. Walau bagaimanapun, seperti mana -mana perisian, mereka juga boleh dieksploitasi jika digunakan secara tidak wajar. Pastikan anda sentiasa menggunakan versi terbaru perpustakaan dan ikuti amalan terbaik untuk pengekodan selamat.

perpustakaan mana yang harus saya pilih untuk projek saya: Imagick atau GD?

Memilih Imagick atau GD bergantung kepada keperluan khusus projek. Jika keupayaan pemprosesan imej lanjutan diperlukan, atau imej besar perlu diproses, Imagick mungkin menjadi pilihan yang lebih baik. Walau bagaimanapun, jika anda bekerja pada projek yang lebih mudah, atau bekerja dalam persekitaran yang terhad sumber, GD mungkin menjadi pilihan yang lebih baik.

Bolehkah saya beralih dari GD ke Imagay Midway melalui projek (dan sebaliknya)?

Walaupun secara teknikal mungkin beralih dari GD ke Imagick Midway melalui projek (dan sebaliknya), ini biasanya tidak disyorkan. Ini kerana kedua -dua perpustakaan menggunakan nama sintaks dan fungsi yang berbeza, jadi penukaran mungkin memerlukan perubahan yang ketara pada kod. Jika anda sedang mempertimbangkan suis, biasanya lebih baik membuat keputusan pada permulaan projek.

Atas ialah kandungan terperinci Imagick vs Gd. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Kontena Suntikan Ketergantungan PHP: Permulaan yang cepatKontena Suntikan Ketergantungan PHP: Permulaan yang cepatMay 13, 2025 am 12:11 AM

AphpdependencyInjectionContainerisatoLthatMatagesClassDependencies, EnhancingCodeModularity, Testability, andMaintainability.itactsascentralHubforcreatingandinjectingdependencies, sheReducingTightCouplingandeaseaseaseSunittesting.

Suntikan ketergantungan berbanding pencari perkhidmatan di phpSuntikan ketergantungan berbanding pencari perkhidmatan di phpMay 13, 2025 am 12:10 AM

Pilih DependencyInjection (DI) Untuk aplikasi besar, servicelocator sesuai untuk projek kecil atau prototaip. 1) DI meningkatkan kesesuaian dan modulariti kod melalui suntikan pembina. 2) ServiceLocator memperoleh perkhidmatan melalui pendaftaran pusat, yang mudah tetapi boleh menyebabkan peningkatan gandingan kod.

Strategi Pengoptimuman Prestasi PHP.Strategi Pengoptimuman Prestasi PHP.May 13, 2025 am 12:06 AM

Phpapplicationscanbeoptimizedforspeedandeficiencyby: 1) enablingopcacheinphp.ini, 2) menggunakan preparedSwithpdofordatabasequeries, 3) menggantikanloopswitharray_filterandarray_mapfordataprocessing, 4) configuringnginywinginywinyvinyvinginy

Pengesahan E -mel PHP: Memastikan e -mel dihantar dengan betulPengesahan E -mel PHP: Memastikan e -mel dihantar dengan betulMay 13, 2025 am 12:06 AM

PhpeMailvalidationInvolvestHreesteps: 1) formatValidationingRegularExpressionStocheckTheemailFormat; 2) dnsvalidationtoensurethedomainhasavalidmxrecord;

Cara membuat aplikasi php lebih cepatCara membuat aplikasi php lebih cepatMay 12, 2025 am 12:12 AM

Tomakephpapplicationsfaster, ikutiTheseSteps: 1) UseopcodecachinglikeopcachetostorePrecompiledscriptbytecode.2) minimizedatabasequeriesbyusingquerycachingandeficientindexing.3)

Senarai Semak Pengoptimuman Prestasi PHP: Meningkatkan Kelajuan SekarangSenarai Semak Pengoptimuman Prestasi PHP: Meningkatkan Kelajuan SekarangMay 12, 2025 am 12:07 AM

ToimprovePhpapPlicationspeed, ikutiTheSesteps: 1) EnableopCodeCachingWithApcutoreduceScriptExecutionTime.2) pelaksanaanDatabasequerycachingingPdotominimizedataBaseHits.3)

Suntikan Ketergantungan PHP: Meningkatkan kebolehlaksanaan kodSuntikan Ketergantungan PHP: Meningkatkan kebolehlaksanaan kodMay 12, 2025 am 12:03 AM

Suntikan ketergantungan (DI) dengan ketara meningkatkan kesesuaian kod PHP oleh kebergantungan transitif secara eksplisit. 1) Kelas Decoupling dan pelaksanaan khusus menjadikan ujian dan penyelenggaraan lebih fleksibel. 2) Di antara tiga jenis, pembina menyuntik kebergantungan ekspresi eksplisit untuk memastikan keadaan konsisten. 3) Gunakan bekas DI untuk menguruskan kebergantungan kompleks untuk meningkatkan kualiti kod dan kecekapan pembangunan.

Pengoptimuman Prestasi PHP: Pengoptimuman Pertanyaan Pangkalan DataPengoptimuman Prestasi PHP: Pengoptimuman Pertanyaan Pangkalan DataMay 12, 2025 am 12:02 AM

DatabaseQueryoptimizationInpinvolvesseverSlegatiesToenhancePratePratePratePratePratePregiesToRperformance.1) selectOnlynessaryColumnStoReducedatatatransfer.2) UseIndexingTospeedupdatareTrieval.3) PrevancequerycachingToStoreresultSoffReFfeFfffffffffffffffffffffffffffffffffffffffffffferseprewfffffffffffersepresseprespersepresperseprespersepresperseprespersepresperseprespers

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌
Nordhold: Sistem Fusion, dijelaskan
3 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Persekitaran pembangunan bersepadu PHP yang berkuasa

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

Dreamweaver Mac版

Dreamweaver Mac版

Alat pembangunan web visual

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan