Problem:
To wyzwanie wynika z prawdziwego problemu, który miałem. Mam konfigurację z dwoma monitorami w pracy i chciałem użyć następującego obrazu jako tapety:
Jednak moje monitory mają dość znaczące ramki, a kiedy ustawiam tło, wygląda to mniej więcej tak, że molo (appier?) Jest zepsute:
Udało mi się to rozwiązać, wykonując obraz z wyciętym środkiem, a następnie rozciągając go z powrotem do oryginalnego rozmiaru, jak na poniższym obrazku:
Wyzwanie:
Napisz program, który pobiera obraz i „monitoruje” go w celu użycia z konfiguracją z dwoma monitorami (tj. Usuwa środkową część obrazu, gdzie znajdują się ramki). Reguły są następujące:
- Musi to być pełny program, który akceptuje obraz jako ścieżkę (argument ciągu itp.) Lub w formie okna dialogowego wyboru plików.
- Program musi przyjąć jako dane wejściowe liczbę pionowych linii (o szerokości jednego piksela), aby wykadrować je ze środka obrazu
- Kadrowanie musi pochodzić ze środka (szerokości) oryginalnego obrazu
- Powstały obraz musi zostać ponownie przeskalowany do oryginalnego rozmiaru obrazu wejściowego. (Połówki można skalować indywidualnie, a następnie konkatenować lub konkatenować, a następnie skalować. Skalowanie indywidualnie daje lepszy obraz / efekt, ale w rzeczywistości nie jest zauważalne)
- Obrazy tła są na ogół równe, więc aby ułatwić to wyzwanie, obrazy wejściowe będą miały tylko parzystą liczbę pikseli, a liczba linii do usunięcia będzie równa.
- Wyzwaniem jest kod golfowy - wygrywa najkrótszy kod w bajtach
Powodzenia!
code-golf
image-processing
dberm22
źródło
źródło
Odpowiedzi:
Oktawa, 85 bajtów
Definiuje anonimową funkcję z
f
nazwą pliku in
liczbą kolumn do usunięcia. Ponieważ anonimowa funkcja wymaga pojedynczego wyrażenia, używane jest przypisanie wewnętrzne, funkcja nieobecna w MATLAB.MATLAB, 98 bajtów
Jako bonus grałem też w odpowiedź zgodną z MATLAB. Co ciekawe, jest to tylko 13 bajtów dłużej, ponieważ wersja Octave wymaga wielu nawiasów, aby poprawnie przeanalizować przypisania wbudowane.
źródło
Matlab 2013, 150 bajtów
Oto moja próba w Matlabie. Zdecydowanie nie będzie najkrótszym kodem, ale to początek.
Uwaga, to zastępuje oryginalny obraz, więc najpierw wykonaj kopię.
Wersja golfowa
Kod niepoznany z ulepszeniami dla nieparzystych rozmiarów obrazów i nieparzystej liczby kolumn
źródło
os
itd. Do dowolnej innej litery w alfabecie! A może po prostu zapisać obraz z powrotem do obrazu wejściowego,f
aby zapisać całośćstrcat
? (które, nawiasem mówiąc, można zastąpić['',...]
zamiaststrcat(...)
)Wolfram Language,
134,127,119111 bajtówTworzy funkcję,
f
która pobiera obraz jako pierwsze wejście (jako symbol w Mathematica lub w chmurze Wolfram), a liczba całkowita jako drugie wejście.Nie golfowany :
Technicznie nie będzie działać poprawnie, jeśli którykolwiek z wymiarów obrazu przekroczy 362 880 pikseli, ale zakładam, że jest w porządku, ponieważ jest to znacznie poza zakresem problemu (i niektórych komputerów).Naprawiony!źródło
PHP, 206 bajtów
pobiera trzy argumenty wiersza poleceń: nazwę pliku źródłowego, liczbę wierszy do przycięcia i docelową nazwę pliku. Uruchom z
-r
.Możesz użyć
imagecopyresampled
zamiastimagecopyresized
(+2 bajtów), aby uzyskać lepszy wynik.bez golfa
Mógłbym zaoszczędzić jeszcze 9 bajtów, wysyłając wynik PNG do STDOUT ... ale po co?
źródło
php -r image.php image.png 1 > output.png
, prawda?