Buat program atau fungsi yang menggunakan nama file sebagai argumen atau membacanya dari input standar, dan menyelesaikan tugas berikut:
- Baca gambar dari file png (nama diberikan sebagai argumen).
- Membalikkan warna dalam gambar itu, sehingga misalnya hijau tua (0, 75, 30) akan menjadi (255, 180, 225) (karena 255-0 = 255, 255-75 = 180 dan 255-30 = 225). Anda seharusnya tidak mengubah nilai saluran alpha.
- Keluarkan gambar itu ke file yang disebut
a.png
(dalam format png), atau tampilkan di jendela GUI.
Ini adalah kode-golf . Celah standar berlaku.
code-golf
graphical-output
image-processing
Hannes Karppila
sumber
sumber
Jawaban:
ImageMagick
display -fx
, 371824byteAlat ImageMagick
display
denganfx
parameter dapat menerapkan program di atas ke png yang diberikan sebagai parameter dan menampilkan hasilnya di layar.Lihat pos saya tentang meta tentang ImageMagick sebagai bahasa pemrograman. Saya menulis tester utama di sana sebagai bukti konsep.
Penghitungan byte ulang,
display -fx code filename
sama denganperl -e code filename
, di mana kita menghitung secara tradisional hanyacode
untuk panjang.sumber
Pyth,
161513 byteOutput ke
a.png
.Terima kasih kepada Jakube untuk 2 byte!
sumber
~
atau serupa)?.w-LLL255'z\a
. Tapi jangan tanya saya bagaimana ini bekerja atau mengapa Anda perluLLL
dan bukan sesuatu seperti ituLMM
.MATL , 10 byte
Ada lima subformat berbeda PNG yang , tergantung pada bagaimana warna dikodekan. Tak satu pun dari mereka yang tampaknya lebih "opsional" daripada yang lain. Saya memilih yang paling fleksibel
Truecolor
,, di mana setiap piksel dapat memiliki warna sewenang-wenang. Kode di atas juga mendukungTruecolor with alpha
, mengabaikan saluran alpha.Untuk mengetahui subformat warna dari file PNG: cari urutan byte di
[73 72 68 82]
dekat awal file; dan byte kesepuluh dari sana akan memiliki satu dari lima nilai dalam tabel yang ditautkan di atas .Bagaimana kodenya bekerja
Cukup mudah:
Contoh
Saya tidak bisa menahan diri untuk tidak melihat diri saya terbalik, jadi saya mengunduh gambar ini (yang ada di dalam subformat
Truecolor with alpha
), menjalankan kode (baris kedua adalah input pengguna)dan mendapatkan
sumber
Jawa, 295
sumber
java.io.File
?import java.io.*;
, itu tidak menyimpan byte tetapi sebenarnya meningkatkan ukuran.R, 124 byte
Membaca dalam nama file melalui stdin (
readline()
).Contoh Input / Output menggunakan png pertama yang saya temukan di komputer ini :)
sumber
CSS, 19 Bytes
http://output.jsbin.com/suqayudoyu
sumber
Tcl, 176 byte
Memuat PNG melalui
photo
tipe gambar, mendapatkan data gambar, mengonversi setiap baris dan warna dengan mengurangi dari #FFFFFF, lalu menulis file kembali ke disk (sebagai "a.png").Untuk hasil terbaik, gunakan TrueColor PNGs, karena Tk akan mencoba menggunakan resolusi warna yang sama dengan data gambar sumber.
Untuk melihat gambar tanpa masalah pengambilan sampel, tambahkan
sampai akhir. (Jelas, ini lebih panjang dari opsi penyimpanan disk.)
sumber
foreach
denganlmap
Mathematica, 140 byte
sumber
Import[#]
keImport@#
, dan sama untukColorCombine[Most@#]
.ColorNegate@*Import
jawaban sederhana tidak menjadi jawaban yang lengkap?cmd + IrfanView, 19 karakter
Hanya alternatif mahal dari Sparr 's jawaban .
sumber
Julia,
9479 byteIni adalah program lengkap yang menggunakan nama file sebagai argumen baris perintah dan menimpa file yang diberikan dengan gambar terbalik. Ini mensyaratkan bahwa
FileIO
danImage
paket diinstal. Yang terakhir tidak perlu diimpor.Panggil program dari baris perintah seperti
julia filename.jl /path/to/image.png
.Tidak Disatukan:
Contoh:
sumber
Python + PIL, 85 byte
Ini mendefinisikan fungsi anonim yang mengambil nama file sebagai string dan menyimpan gambar yang dihasilkan
a.png
.Uji coba:
sumber
from PIL import Image as I
diikuti dengan menggantiImage
fungsi denganI
import Image
akan bekerja, mengurangi seluruh bytefrom PIL.Image import*
eval
fungsi berjalan melawan semua "band", termasuk yang alpha. Inilah yang saya dapatkan ketika membalik logo Firefox - imgur.com/a/wV3MSQXC + stb_image + stb_image_write,
175162 byte (atau + 72 =247234)Kiriman pertama saya di situs ini.
Mungkin bisa mengurangi beberapa byte. Perlu
stb_*
implementasi baik di perpustakaan terpisah, atau di awal file ini dengan:Saya tidak memasukkannya ke dalam penghitungan karena pada dasarnya ini adalah bagian dari perpustakaan (khususnya jika dikompilasi secara terpisah). +72 byte untuk menambahkan itu jika diperlukan.
Pembaruan 1:
Hanya menyadari fungsi (yang bertentangan dengan seluruh program) yang dapat diterima, memotong 15 byte. The tua pelaksanaan (yang merupakan program seluruh), untuk referensi:
sumber
Java,
300298 bytesumber
MATLAB / Oktaf, 31 byte
Kode:
Contoh:
Penjelasan:
Baca gambar,,
x
dari file grafik, lengkapi gambar, dan kemudian tampilkan gambar.sumber
x
sudah ditentukan sebelumnya, yang tidak diizinkan. Anda dapat mengubahnya menjadi fungsi lambda untuk +4 byte@(x)
.FFmpeg, 10 byte
Sunting: Mengambil petunjuk dari jawaban @ Sparr
(di atas bila dilewatkan untuk bermain bersama dengan nama gambar, akan menampilkan gambar yang dinegasikan)
Di atas disimpan sebagai file batch.
sumber
Racket 282 byte
Bentuk yang lebih mudah dibaca:
Pemakaian:
sumber
Golang, 311 byte
ungolfed
sumber
Python 2 + OpenCV , 55 byte
Pustaka OpenCV menggunakan array NumPy untuk membaca, memproses, dan menulis gambar. Di bawah ini adalah contoh dari skrip ini membalik gambar yang ditemukan di mozilla.org .
Semua saluran, termasuk saluran alfa, akan terbalik. Ini bermasalah untuk gambar yang memiliki transparansi. Tetapi seperti yang ditunjukkan @Mego, dukungan untuk saluran alpha adalah opsional.
Di bawah ini adalah versi berkomentar 82 byte yang properti menangani saluran alpha.
Seperti ditunjukkan di bawah, ini dengan benar menangani pembalik logo Firefox sambil mempertahankan latar belakang transparan.
sumber