इनग पिंग इमेज


15

प्रोग्राम या फ़ंक्शन बनाएँ जो फ़ाइल नाम को एक तर्क के रूप में लेता है या इसे मानक इनपुट से पढ़ता है, और निम्न कार्य पूरा करता है:

  1. एक पीएनजी फ़ाइल (तर्क के रूप में दिया गया नाम) से छवि पढ़ें।
  2. उस छवि में उल्टे रंग, ताकि उदाहरण के लिए गहरा हरा (0, 75, 30) बन जाए (255, 180, 225) (क्योंकि 255-0 = 255, 255-75 = 180 और 255-30 = 225)। आपको अल्फा चैनल मान नहीं बदलना चाहिए।
  3. उस छवि को फ़ाइल a.png(png प्रारूप में) नामक आउटपुट , या GUI विंडो में दिखाएं।

यह । मानक खामियां लागू होती हैं।


क्या किसी वैकल्पिक png सुविधाओं का समर्थन करना आवश्यक है? क्या अंतर्निहित पीएनजी लोडिंग / लेखन कार्य स्वीकार्य हैं?

@ वैकल्पिक वैकल्पिक सुविधा का समर्थन वैकल्पिक है । अंतर्निहित कार्य स्पष्ट रूप से अस्वीकृत नहीं हैं, इसलिए मैं मान लूंगा कि उन्हें अनुमति है।
हेंस कारपिला

5
PNG फ़ाइलों को अनुक्रमित किया जा सकता है (प्रत्येक पिक्सेल में कॉलॉर्मप में एक रंग के लिए एक संकेतक होता है) या ट्रूकोलर (प्रत्येक पिक्सेल में वास्तविक रंग होता है)। हमें किसका समर्थन करने की आवश्यकता है? क्या हम चुन सकते हैं? वास्तव में, रंग के संबंध में पांच अलग-अलग उपप्रकार हैं। इसलिए... ?
लुइस मेन्डो

@DonMuesli मुझे लगता है कि सही परिणाम प्रदान करने वाली कोई भी विधि ठीक होगी। आप मान सकते हैं कि रंग ग्रेस्केल नहीं है, और अल्फा-चैनल का समर्थन वैकल्पिक है। मुझे लगता है कि किसी भी अन्य मोड का उपयोग करना स्वीकार्य है, जब तक कि कार्य अभी भी रंगों को उलट रहा है, और रंगों में (आर, जी, बी) -वास्तव हैं।
हनीस करपिला

1
क्या मैं सिर्फ CSS का उपयोग कर सकता हूँ?
रिज्ज़े

जवाबों:


30

ImageMagick display -fx, 3 7 18 24 बाइट्स

1-u

पैरामीटर के displayसाथ ImageMagick टूल fxउपरोक्त प्रोग्राम को पैरामीटर के रूप में दिए गए png पर लागू कर सकता है और स्क्रीन पर परिणाम प्रदर्शित कर सकता है।

एक प्रोग्रामिंग भाषा के रूप में ImageMagick के बारे में मेटा पर मेरी पोस्ट देखें । मैंने अवधारणा के प्रमाण के रूप में वहां पर एक मुख्य परीक्षक लिखा था।

री बाइट गिनती, display -fx code filenameके बराबर है perl -e code filename, जहां हम परंपरागत रूप से सिर्फ codeलंबाई के लिए गिनती करते हैं।


क्या यह एक मानक खामियाजा नहीं है? यह बहुत सारे हो गया है, लेकिन ऐसा लगता है जैसे यह होना चाहिए। मुझे लगता है कि अगर मैथेमेटिका में निर्मित इन कार्यों का एक गुच्छा हो सकता है, तो किसी भी पूर्व-रिलीज़ किए गए एप्लिकेशन (प्रश्न के पूछने से पहले) का उपयोग करना आपके लिए उचित खेल है, इसलिए जब तक यह कमांड-लाइन तर्क स्वीकार नहीं करता है?
नैट डायमंड

1
@ नैटडैमोंड ने मुझे अपनी मेटा पोस्ट को समाप्त करने के लिए लगभग 5 मिनट का समय दिया "इमेजिनेशन एक प्रोग्रामिंग लैंग्वेज है" और मैं इसे 7 बाइट्स तक काट दूंगा और एक ही समय में आपके सवाल का जवाब
दूंगा


21

पायथ, 16 15 13 बाइट्स

.w-LLL255'z\a

को आउटपुट देता है a.png

          z    read input
         '     read as RGB triples from file
   LLL         map over rows, then triples, then individual values...
  -   255      ...subtract from 255
.w         \a  write as image to a.png

2 बाइट्स के लिए Jakube का धन्यवाद !


4
आदमी, मैं समझ गया हूँ pyth
भूमिगत

1
क्या पाइथ में बिटवाइज़ निगेटिव ( ~या समान) नहीं है?
पीटर टेलर

@PeterTaylor मुझे नहीं लगता कि यह आश्चर्यजनक रूप से है। (किसी भी मामले में, यह 8 बिट तक ही सीमित करना होगा।)
दरवाज़े

वहाँ एक pfn के साथ गहराई से नक्शा करने के लिए कोई रास्ता नहीं है?
वेन

1
@ven @Doorknob वास्तव में आप यह कर सकते हैं .w-LLL255'z\a:। लेकिन मुझसे यह मत पूछो कि यह कैसे काम करता है या आपको इसकी आवश्यकता क्यों है LLLऔर कुछ पसंद नहीं है LMM
जैकब

18

MATL , 10 बाइट्स

255iYi-IYG

कर रहे हैं पाँच अलग अलग subformats पीएनजी की, कैसे रंग एन्कोड किया गया है पर निर्भर करता है। उनमें से कोई भी अन्य की तुलना में अधिक "वैकल्पिक" नहीं लगता है। मैंने सबसे लचीला एक चुना Truecolor, जिसमें प्रत्येक पिक्सेल में एक मनमाना रंग हो सकता है। उपरोक्त कोड Truecolor with alphaअल्फा चैनल की अनदेखी करते हुए भी समर्थन करता है ।

पीएनजी फ़ाइल का रंग उप-प्रकार जानने के लिए: फ़ाइल [73 72 68 82]की शुरुआत के पास बाइट अनुक्रम देखें ; और वहाँ से दसवें बाइट में पाँच मूल्यों में से एक होगा ऊपर दी गई तालिका

कोड कैसे काम करता है

बहुत सीधा:

255    % push 255 to the stack
i      % input filename with extension '.png'
Yi     % read contents of that file as (truecolor) image
-      % subtract
IYG    % show image

उदाहरण

मैं खुद को उलटा देखकर विरोध नहीं कर सकता था, इसलिए मैंने इस छवि को डाउनलोड किया (जो सबफॉर्म में है Truecolor with alpha), कोड चलाया (दूसरी पंक्ति उपयोगकर्ता इनपुट है)

>> matl 255iYi-IYG
> 'C:\Users\Luis\Desktop\me.png'

और पा लिया

यहां छवि विवरण दर्ज करें


1
आपका अवतार वास्तव में आप हैं? मैंने सोचा कि यह सिर्फ आपका हेलमेट था! : पी
डाउनगेट

1
मैंने सोचा था कि पीएनजी और सभी का मतलब है लंबा कोड, लेकिन 10 बाइट्स? वाह।
बफ़र ओवर पढ़ें

17

जावा, 295

import javax.imageio.*;class V{public static void main(String[]a)throws
Exception{java.awt.image.BufferedImage m=ImageIO.read(new
java.io.File(a[0]));for(int
x=m.getWidth(),y;x-->0;)for(y=m.getHeight();y-->0;)m.setRGB(x,y,m.getRGB(x,y)^-1>>>8);ImageIO.write(m,"png",new
java.io.File("a.png"));}}

1
मुझे पसंद है कि कैसे x-- और x> 0 मिलकर एक लिट्टी एरो बनाते हैं जो दिखाते हैं कि x 0 तक जाता है। मैंने पहले कभी ऐसा क्यों नहीं देखा / इस्तेमाल नहीं किया?
लुवि

आयात करें java.io.File?
निकब

1
@LuWi हे, मैंने पहले देखा है और इसका इस्तेमाल किया है, कुछ लोग इसे "ऑपरेटर" को कहते हैं, और यह बहुत सुंदर है :)
एडिट्स ने छोड़ दिया क्योंकि एसई EVIL

@nickb भले ही आप छोटे का उपयोग करते हैं import java.io.*;, यह किसी भी बाइट को नहीं बचाता है लेकिन वास्तव में आकार बढ़ाता है।
एडित्सू ने छोड़ दिया क्योंकि SE को EVIL

4

आर, 124 बाइट्स

p=png::readPNG(readline());p[,,-4]=1-p[,,-4];png("a.png",h=nrow(p),w=ncol(p));par(mar=rep(0,4));plot(as.raster(p));dev.off()

फ़ाइल नाम में स्टड ( readline()) के माध्यम से पढ़ता है ।

p=png::readPNG(readline()) #Reads in png as an RGBA array on range [0,1]
p[,,-4]=1-p[,,-4] #Takes the opposite value except on alpha layer
png("a.png",h=nrow(p),w=ncol(p)) #Prepares output png of same size as input
par(mar=rep(0,4)) #Makes the png take the full space of the figure region
plot(as.raster(p)) #Transforms p as a raster so that it can be plotted as is.
dev.off() #Closes the plotting device.

उदाहरण इनपुट / आउटपुट इस कंप्यूटर पर मुझे मिले पहले png का उपयोग करके :)

इनपुट उत्पादन



2

टीईसीएल, 176 बाइट्स

foreach r [[image c photo -file {*}$argv] d] {set x {}
foreach c $r {lappend x [format #%06X [expr "0xFFFFFF-0x[string ra $c 1 end]"]]}
lappend y $x}
image1 p $y
image1 w a.png

photoछवि प्रकार के माध्यम से PNG को लोड करता है, छवि डेटा प्राप्त करता है, #FFFFFF से घटाकर प्रत्येक पंक्ति और रंग परिवर्तित करता है, फिर फ़ाइल को डिस्क पर वापस भेजता है (जैसा कि "a.png")।

सर्वोत्तम परिणामों के लिए, TrueColor PNGs का उपयोग करें, क्योंकि Tk स्रोत छवि डेटा के समान रंग रिज़ॉल्यूशन का उपयोग करने का प्रयास करेगा।

नमूना समस्याओं के बिना छवि को देखने के लिए, जोड़ें

pack [label .i -image image1]

अंत की ओर। (जाहिर है, यह डिस्क-सेव विकल्प से अधिक लंबा है।)


आप की जगह बाइट्स एवेन्यू सकता foreachद्वाराlmap
sergiol

2

गणितज्ञ, 140 बाइट्स

Export["a.png",SetAlphaChannel[ColorCombine[Most@#],Last@#]&@MapAt[Image[1-ImageData@#]&,ColorSeparate[Import[#],{"R","G","B","A"}],{;;3}]]&

ध्यान दें कि आप को बदलने के द्वारा दो बाइट्स बचा सकते हैं Import[#]करने के लिए Import@#, और के लिए एक ही ColorCombine[Most@#]
संख्यामान

एक साधारण ColorNegate@*Importएक पूर्ण उत्तर क्यों नहीं होगा ?
लीजनमोनमाल 978


2

जूलिया, 94 79 बाइट्स

using FileIO
save(ARGS[1],map(x->typeof(x)(1-x.r,1-x.g,1-x.b,1),load(ARGS[1])))

यह एक पूर्ण कार्यक्रम है जो कमांड लाइन तर्क के रूप में एक फ़ाइल का नाम लेता है और उल्टे छवि के साथ दी गई फ़ाइल को ओवरराइट करता है। इसके लिए आवश्यक है कि पैकेज FileIOऔर Imageपैकेज को स्थापित किया जाए। उत्तरार्द्ध को हालांकि आयात करने की आवश्यकता नहीं है।

कमांड लाइन से प्रोग्राम को कॉल करें जैसे julia filename.jl /path/to/image.png

Ungolfed:

using FileIO # required for reading and writing image files

# Load the given image into a matrix where each element is an RGBA value
a = load(ARGS[1])

# Construct a new image matrix as the inverse of `a` by, for each element
# `x` in `a`, constructing a new RGBA value as 1 - the RGB portions of
# `x`, but with an alpha of 1 to avoid transparency.
b = map(x -> typeof(x)(1 - x.r, 1 - x.g, 1 - x.b, 1), a)

# Save the image using the same filename
save(ARGS[1], b)

उदाहरण:

नियमित उल्टे


1
मैगपाई (?) दूसरी छवि पर गंभीरता से उदास दिखता है।
बैलिंट

1

पायथन + पीआईएल, 85 बाइट्स

from PIL import Image
lambda a:Image.eval(Image.open(a),lambda x:255-x).save('a.png')

यह एक अनाम फ़ंक्शन को परिभाषित करता है जो एक स्ट्रिंग के रूप में एक फ़ाइल नाम लेता है और परिणामी छवि को बचाता है a.png

परीक्षण चालन:

लामा लामा बाहर


1
-3 बाइट्स:, from PIL import Image as Iइसके बाद Imageफंक्शन में I
रिप्लेस

मुझे पूरा यकीन है कि बस import Imageकाम करेगा, बाइट्स के पूरे भार को हटाते हुए
बीटा डिके

11 बाइट्स बचाएंfrom PIL.Image import*
हारून

मुझे लगता है कि यह गलती से अल्फा चैनल को भी प्रभावित करता है। जाहिरा तौर पर evalफ़ंक्शन अल्फा एक सहित सभी "बैंड" के खिलाफ चलता है। यहाँ फ़ायरफ़ॉक्स लोगो inverting करते समय मुझे क्या मिलता है - imgur.com/a/wV3MSQX
dana

1
@ ओपी की टिप्पणी के अनुसार , अल्फा चैनलों का समर्थन वैकल्पिक है।
मीगो

1

C + stb_image + stb_image_write, 175 162 बाइट्स (या + 72 =)247 234)

इस साइट पर मेरा पहला सबमिशन।

#include"stb_image.h"
#include"stb_image_write.h"
x,y,c,i;f(char*d){d=stbi_load(d,&x,&y,&c,i=0);for(;i<x*y*c;i++)d[i]=255-d[i];stbi_write_png("a.png",x,y,c,d,0);}

शायद कुछ बाइट्स से शेव कर सकते थे। stb_*कार्यान्वयन की जरूरत है या तो एक अलग पुस्तकालय में, या इस फ़ाइल की शुरुआत में:

#define STB_IMAGE_IMPLEMENTATION
#define STB_IMAGE_WRITE_IMPLEMENTATION

मैंने इसे गिनती में शामिल नहीं किया क्योंकि यह अनिवार्य रूप से लाइब्रेरी का हिस्सा है (यदि यह अलग से संकलित है)। +72 बाइट्स यदि आवश्यक हो, तो जोड़ने के लिए।


अपडेट 1:

केवल एक फ़ंक्शन का एहसास हुआ (पूरे कार्यक्रम के विपरीत) स्वीकार्य है, 15 बाइट्स से शेविंग। वर्ष कार्यान्वयन के संदर्भ के लिए (जो एक पूरे कार्यक्रम है),:

x,y,i;main(int c,char**d){*d=stbi_load(d[1],&x,&y,&c,0);for(;i<x*y*c;i++)i[*d]=255-i[*d];stbi_write_png("a.png",x,y,c,*d,0);}

1

जावा, 300 298 बाइट्स

import javax.swing.*;void c(String f)throws Exception{java.awt.image.BufferedImage r=javax.imageio.ImageIO.read(new java.io.File(f));for(int i=0;i++<r.getWidth();)for(int j=0;j++<r.getHeight();)r.setRGB(i,j,(0xFFFFFF-r.getRGB(i,j))|0xFF000000);JOptionPane.showMessageDialog(null,new ImageIcon(r));}

1

MATLAB / ऑक्टेव, 31 बाइट्स

कोड:

imshow(imcomplement(imread(x)))

उदाहरण:

imshow(imcomplement(imread('balloons.png')))

यहां छवि विवरण दर्ज करें              यहां छवि विवरण दर्ज करें

स्पष्टीकरण:

xग्राफिक्स फ़ाइल से छवि पढ़ें, छवि को पूरक करें, और फिर छवि प्रदर्शित करें।


कोड मानता है कि xपूर्वनिर्धारित है, जिसकी अनुमति नहीं है। आप इसे +4 बाइट्स के लिए लंबो फ़ंक्शन में बदल सकते हैं @(x)
मेघो

0

FFmpeg, 10 बाइट्स

संपादित करें: @ स्पर्स के उत्तर से एक क्यू लेना

-vf negate

(ऊपर जब छवि नाम के साथ ffplay पारित किया है, तो नकारात्मक छवि प्रदर्शित होगी)


ffplay %1 -vf negate

ऊपर एक बैच फ़ाइल के रूप में सहेजा गया है।


1
क्या FFmpeg हमारे मानकों द्वारा एक प्रोग्रामिंग भाषा है? मुझे यकीन है कि इसके बारे में पर्याप्त नहीं पता है। शायद मेटा पर पूछें?
मेगो

0

रैकेट 282 बाइट्स

(λ(fname)(let*((i(make-object bitmap% fname))(w(send i get-width))(h(send i get-height))(pixels(make-bytes(* w h 4)))(i2(make-object bitmap% w h)))
(send i get-argb-pixels 0 0 w h pixels)(send i2 set-argb-pixels 0 0 w h(list->bytes(map(lambda(x)(- 255 x))(bytes->list pixels))))i2))

अधिक पठनीय रूप:

(define(f fname)
  (let*(
        (i (make-object bitmap% fname))
        (w (send i get-width))
        (h (send i get-height))
        (pixels (make-bytes(* w h 4)))
        (i2 (make-object bitmap% w h)))
    (send i get-argb-pixels 0 0 w h pixels)
    (send i2 set-argb-pixels 0 0 w h
          (list->bytes
           (map
            (lambda(x) (- 255 x))
            (bytes->list pixels))))
    i2))

उपयोग:

(f "myimg.png")

0

गोलंग, 311 बाइट्स

package main
import("image"
."image/png"
."image/color"
."os")
func main(){f,_:=Open(Args[1])
i,_:=Decode(f)
q:=i.Bounds()
n:=image.NewRGBA(q)
s:=q.Size()
for x:=0;x<s.X;x++{for y:=0;y<s.Y;y++{r,g,b,a:=i.At(x,y).RGBA()
n.Set(x,y,RGBA{byte(255-r),byte(255-g),byte(255-b),byte(a)})}}
o,_:=Create("o")
Encode(o,n)}

ungolfed

package main
import(
    "image"
    "image/png"
    "image/color"
    "os"
)

func main(){
    // open a png image.
    f, _ := os.Open(Args[1])

    // decode the png image to a positive image object(PIO).
    p, _ := png.Decode(f)

    // get a rectangle from the PIO.
    q := p.Bounds()

    // create a negative image object(NIO).
    n := image.NewRGBA(q)

    // get the size of the PIO.
    s := q.Size()

    // invert the PIO.
    for x := 0; x < s.X; x++ {
        for y := 0; y < s.Y; y++ {
            // fetch the value of a pixel from the POI.
            r, g, b, a := p.At(x, y).RGBA()

            // set the value of an inverted pixel to the NIO.
            // Note: byte is an alias for uint8 in Golang.
            n.Set(x, y, color.RGBA{uint8(255-r), uint8(255-g), uint8(255-b), uint8(a)})
        }
    }

    // create an output file.
    o, _ := os.Create("out.png")


    // output a png image from the NIO.
    png.Encode(o, n)
}

0

पायथन 2 + ओपनसीवी , 55 बाइट्स

import cv2
cv2.imwrite('a.png',255-cv2.imread(input()))

OpenCV लाइब्रेरी छवियों को पढ़ने, संसाधित करने और लिखने के लिए NumPy सरणियों का उपयोग करता है। नीचे इस लिपि का उदाहरण दिया गया है जो mozilla.org पर पाई गई एक छवि को दर्शाती है

एज आर्टवर्क उलटा

अल्फा चैनल सहित सभी चैनल उलटे होंगे। यह उन छवियों के लिए समस्याग्रस्त है जिनके पास पारदर्शिता है। लेकिन @Mego ने बताया कि अल्फा चैनल के लिए समर्थन वैकल्पिक है।

नीचे एक 82 बाइट टिप्पणी वाला संस्करण है जो संपत्ति अल्फा चैनल को संभालती है।

import cv2                # import OpenCV library
i=cv2.imread(input(),-1)  # image file name is specified from stdin
                          # read with the IMREAD_UNCHANGED option
                          # to preserve transparency
i[:,:,:3]=255-i[:,:,:3]   # invert R,G,B channels
cv2.imwrite('a.png',i)    # output to a file named a.png

जैसा कि नीचे दिखाया गया है, यह पारदर्शी पृष्ठभूमि को संरक्षित करते हुए फ़ायरफ़ॉक्स लोगो को ठीक से संभालता है।

फ़ायरफ़ॉक्स लोगो उलटा

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.