Utwórz program lub funkcję, która pobiera nazwę pliku jako argument lub odczytuje go ze standardowego wejścia i wykonuje następujące zadanie:
- Odczytaj obraz z pliku png (nazwa podana jako argument).
- Odwróć kolory na tym obrazie, aby na przykład ciemnozielony (0, 75, 30) stał się (255, 180, 225) (ponieważ 255-0 = 255, 255-75 = 180 i 255-30 = 225). Nie należy zmieniać wartości kanału alfa.
- Wyjmij ten obraz do pliku o nazwie
a.png
(w formacie png) lub pokaż go w oknie GUI.
To jest golf golfowy . Obowiązują standardowe luki.
code-golf
graphical-output
image-processing
Hannes Karppila
źródło
źródło
Odpowiedzi:
ImageMagick
display -fx
, 371824bajtówNarzędzie ImageMagick
display
zfx
parametrem może zastosować powyższy program do png podanego jako parametr i wyświetlić wyniki na ekranie.Sprawdź mój post na stronie meta o ImageMagick jako języku programowania. Napisałem tam główny tester jako dowód koncepcji.
Ponowne liczenie bajtów
display -fx code filename
jest równoważne z tymperl -e code filename
, w którym tradycyjnie liczymy tylkocode
długość.źródło
Pyth,
161513 bajtówWyjścia do
a.png
.Dzięki Jakube za 2 bajty!
źródło
~
lub podobnej)?.w-LLL255'z\a
. Ale nie pytaj mnie, jak to działa lub dlaczego potrzebujesz,LLL
a nie coś takiegoLMM
.MATL , 10 bajtów
Istnieje pięć różnych podformatów PNG, w zależności od sposobu kodowania kolorów. Żaden z nich nie wydaje się bardziej „opcjonalny” niż inne. Wybrałem najbardziej elastyczny
Truecolor
, w którym każdy piksel może mieć dowolny kolor. Powyższy kod obsługuje równieżTruecolor with alpha
ignorując kanał alfa.Aby poznać podformat koloru pliku PNG: poszukaj sekwencji bajtów w
[73 72 68 82]
pobliżu początku pliku; a dziesiąty bajt stamtąd będzie miał jedną z pięciu wartości w tabeli połączonych powyżej .Jak działa kod
Całkiem proste:
Przykład
Nie mogłem się powstrzymać przed odwróceniem się, więc pobrałem ten obraz (który jest w podformacie
Truecolor with alpha
), uruchomiłem kod (drugi wiersz to wejście użytkownika)i dostał
źródło
Java, 295
źródło
java.io.File
?import java.io.*;
, nie zapisuje on żadnych bajtów, ale faktycznie zwiększa rozmiar.R, 124 bajty
Wczytuje nazwę pliku poprzez stdin (
readline()
).Przykład wejścia / wyjścia przy użyciu pierwszego png znalezionego na tym komputerze :)
źródło
CSS, 19 bajtów
http://output.jsbin.com/suqayudoyu
źródło
Tcl, 176 bajtów
Ładuje PNG przez
photo
typ obrazu, pobiera dane obrazu, konwertując każdy wiersz i kolor, odejmując od #FFFFFF, a następnie zapisuje plik z powrotem na dysk (jako „a.png”).Aby uzyskać najlepsze wyniki, użyj TrueColor PNG, ponieważ Tk spróbuje użyć tej samej rozdzielczości kolorów co dane źródłowe obrazu.
Aby zobaczyć obraz bez problemów z próbkowaniem, dodaj
do końca. (Oczywiście jest to dłuższe niż opcja oszczędzania dysku).
źródło
foreach
przezlmap
Mathematica, 140 bajtów
źródło
Import[#]
naImport@#
i taki sam dlaColorCombine[Most@#]
.ColorNegate@*Import
kompletną odpowiedzią?cmd + IrfanView, 19 znaków
Tylko drogie alternatywą Sparr „s odpowiedź .
źródło
Julia,
9479 bajtówJest to pełny program, który przyjmuje nazwę pliku jako argument wiersza poleceń i zastępuje dany plik odwróconym obrazem. Wymaga zainstalowania pakietu
FileIO
iImage
. Ten ostatni nie musi być jednak importowany.Wywołaj program z wiersza poleceń, np
julia filename.jl /path/to/image.png
.Nie golfowany:
Przykład:
źródło
Python + PIL, 85 bajtów
Definiuje to anonimową funkcję, która pobiera nazwę pliku jako ciąg i zapisuje wynikowy obraz
a.png
.Testowe uruchomienie:
źródło
from PIL import Image as I
a następnie zastąpienieImage
w funkcjiI
import Image
zadziała, goląc cały ładunek bajtówfrom PIL.Image import*
eval
funkcja działa na wszystkich „pasmach”, w tym na alfa. Oto, co otrzymuję, odwracając logo Firefoksa - imgur.com/a/wV3MSQXC + stb_image + stb_image_write,
175162 bajty (lub + 72 =247234)Moje pierwsze zgłoszenie na tej stronie kiedykolwiek.
Prawdopodobnie mógł ogolić kilka bajtów. Wymaga
stb_*
implementacji w oddzielnej bibliotece lub na początku tego pliku z:Nie uwzględniłem go w liczniku, ponieważ jest to zasadniczo część biblioteki (zwłaszcza jeśli jest skompilowana osobno). Jednak +72 bajty, aby dodać, jeśli jest to wymagane.
Aktualizacja 1:
Zrealizowana tylko funkcja (w przeciwieństwie do całego programu) jest dopuszczalna, goląc 15 bajtów. Stary realizacja (która jest cały program), dla odniesienia:
źródło
Java,
300298 bajtówźródło
MATLAB / Octave, 31 bajtów
Kod:
Przykład:
Wyjaśnienie:
Przeczytaj obraz
x
z pliku graficznego, uzupełnij obraz, a następnie wyświetl obraz.źródło
x
jest predefiniowany, co jest niedozwolone. Możesz zmienić go w funkcję lambda dla +4 bajtów za pomocą@(x)
.FFmpeg, 10 bajtów
Edycja: pobranie wskazówek z odpowiedzi @ Sparr
(powyższe, przekazane do ffplay wraz z nazwą obrazu, wyświetli negację obrazu)
Powyższe jest zapisywane jako plik wsadowy.
źródło
Rakieta 282 bajtów
Bardziej czytelna forma:
Stosowanie:
źródło
Golang, 311 bajtów
bez golfa
źródło
Python 2 + OpenCV , 55 bajtów
Biblioteka OpenCV używa tablic NumPy do odczytu, przetwarzania i zapisywania obrazów. Poniżej znajduje się przykład tego skryptu odwracającego obraz znaleziony na mozilla.org .
Wszystkie kanały, w tym kanał alfa, zostaną odwrócone. Jest to problematyczne w przypadku obrazów o przezroczystości. Ale jak wskazał @Mego, obsługa kanału alfa jest opcjonalna.
Poniżej znajduje się 82-bajtowa wersja z komentarzem, która obsługuje kanał alfa.
Jak pokazano poniżej, poprawnie obsługuje odwracanie logo Firefoksa przy jednoczesnym zachowaniu przezroczystego tła.
źródło