পিএনজি চিত্রটি উল্টে দিন


15

এমন একটি প্রোগ্রাম বা ফাংশন তৈরি করুন যা ফাইলের নামটিকে একটি আর্গুমেন্ট হিসাবে গ্রহণ করে বা স্ট্যান্ডার্ড ইনপুট থেকে পড়ে এবং নিম্নলিখিত কাজটি সম্পূর্ণ করে:

  1. একটি পিএনজি ফাইল থেকে চিত্র পড়ুন (যুক্তি হিসাবে দেওয়া নাম)।
  2. সেই চিত্রের বিপরীত রঙগুলি, যাতে উদাহরণস্বরূপ গা dark় সবুজ (0, 75, 30) হয়ে যায় (255, 180, 225) (কারণ 255-0 = 255, 255-75 = 180 এবং 255-30 = 225)। আপনার আলফা চ্যানেলের মান পরিবর্তন করা উচিত নয়।
  3. সেই চিত্রটি a.png(পিএনজি ফর্ম্যাটে) নামক কোনও ফাইলে আউটপুট করুন বা জিইউআই উইন্ডোতে দেখান।

এটি । স্ট্যান্ডার্ড লুফোলস প্রযোজ্য।


এটি কি কোনও alচ্ছিক পিএনজি বৈশিষ্ট্য সমর্থন করার প্রয়োজন? বিল্ট-ইন পিএনজি লোডিং / রাইটিং ফাংশনগুলি কি গ্রহণযোগ্য?
স্পার

@Sparr ঐচ্ছিক বৈশিষ্ট্য সমর্থন ঐচ্ছিক । অন্তর্নির্মিত ফাংশনগুলি সুস্পষ্টভাবে অনুমোদিত নয়, তাই আমি ধরে নেব যে সেগুলি অনুমোদিত।
হ্যানিস কার্পিলা

5
পিএনজি ফাইলগুলি ইনডেক্স করা যেতে পারে (প্রতিটি পিক্সেল রঙিন মানচিত্রের একটি রঙের একটি পয়েন্টার ধারণ করে) বা ট্রাইক্লোর (প্রতিটি পিক্সেলটিতে প্রকৃত রঙ থাকে)। আমাদের কোনটিকে সমর্থন করা দরকার? আমরা কি চয়ন করতে পারি? প্রকৃতপক্ষে, রঙ সম্পর্কিত পাঁচটি পৃথক সাবফর্ম্যাট রয়েছে। তো ...?
লুইস মেন্ডো

@ ডোনমুসলি আমি মনে করি যে কোনও পদ্ধতি যা সঠিক ফলাফল দেয় তা ঠিক থাকবে। আপনি ধরে নিতে পারেন যে রঙটি গ্রেস্কেল নয়, এবং আলফা-চ্যানেল সমর্থন করা alচ্ছিক। আমি মনে করি যে অন্য কোনও মোড ব্যবহার করা গ্রহনযোগ্য, যতক্ষণ না টাস্কটি এখনও রঙগুলিকে বিপরীত করবে এবং রঙগুলিতে (r, g, b) - মূল্য রয়েছে।
হ্যানস কার্পিলা 9

1
আমি কি কেবল সিএসএস ব্যবহার করতে পারি?
রিজ

উত্তর:


30

ইমেজম্যাগিক display -fx, 3 7 18 24 বাইট

1-u

প্যারামিটার displayসহ ইমেজম্যাগিক সরঞ্জাম fxউপরের প্রোগ্রামটিকে প্যারামিটার হিসাবে প্রদত্ত একটি পিএনজিতে প্রয়োগ করতে পারে এবং ফলাফলগুলি স্ক্রিনে প্রদর্শন করতে পারে।

প্রোগ্রামিং ভাষা হিসাবে ইমেজম্যাগিক সম্পর্কে মেটাতে আমার পোস্ট দেখুন । আমি ধারণার প্রমাণ হিসাবে সেখানে একটি প্রাইম পরীক্ষক লিখেছি।

বাইট গণনা, display -fx code filenameসমান perl -e code filename, যেখানে আমরা traditionতিহ্যগতভাবে কেবল 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 বাইটের জন্য ধন্যবাদ !


4
মানুষ, আমি পাইথ শিখতে চাইছি
আন্ডারগ্রাউন্ডোমোনাইল

1
পাইথের কি বিটওয়াইজ অবহেলা ( ~বা অনুরূপ) নেই?
পিটার টেলর

@ পিটারটেলর আমি আশ্চর্যজনকভাবে এটি মনে করি না। (যে কোনও ক্ষেত্রে এটি 8 বিটের মধ্যে সীমাবদ্ধ থাকতে হবে))
ডুরকনব

পিএফএন দিয়ে গভীরভাবে মানচিত্রের কোনও উপায় নেই?
ভেন

1
@ven @Doorknob বাস্তবিক আপনি এটা করতে পারেন: .w-LLL255'z\a। তবে আমাকে জিজ্ঞাসা করবেন না এটি কীভাবে কাজ করে বা কেন আপনার প্রয়োজন LLLএবং এর মতো কিছু নয় LMM
জাকুবে

18

এমএটিএল , 10 বাইট

255iYi-IYG

আছে পাঁচটি পৃথক subformats পিএনজি এর, কিভাবে রং এনকোডেড হয়েছে উপর নির্ভর করে। এগুলির কোনওটিই অন্যদের চেয়ে বেশি "alচ্ছিক" বলে মনে হয় না। আমি সবচেয়ে নমনীয় একটি বেছে নিয়েছি 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 টি পর্যন্ত চলে গেছে Why
লুউইইউ

আমদানি java.io.File?
নিকব

1
@ লুউইহে হেই, আমি এর আগে দেখেছি এবং ব্যবহার করেছি, কিছু লোক এটিকে "যান" অপারেটর বলে ডাকে এবং এটি দারুণ আনন্দময় :)
এডিটসু ছাড়েন কারণ এসই এভিল

@ ছোট আপনি এমনকি যদি ছোট ব্যবহার করেন তবে import java.io.*;এটি কোনও বাইট সংরক্ষণ করে না তবে আকারটি বাড়িয়ে তোলে increases
অ্যাডিটসু ছেড়ে গেছে কারণ এসই 15:42

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.

এই কম্পিউটারে আমি খুঁজে পাওয়া প্রথম পিএনজি ব্যবহার করে ইনপুট / আউটপুট উদাহরণ :)

ইনপুট আউটপুট



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চিত্রের ধরণের মাধ্যমে পিএনজি লোড করে , #FFFFFF থেকে বিয়োগ করে প্রতিটি সারি এবং রঙকে রূপান্তর করে চিত্রের ডেটা প্রাপ্ত হয়, তারপরে ফাইলটি ডিস্কে ("a.png" হিসাবে লিখুন)।

সেরা ফলাফলের জন্য, ট্রু কালার পিএনজি ব্যবহার করুন, যেহেতু টাকা উত্স চিত্রের ডেটা হিসাবে একই রঙের রেজোলিউশন ব্যবহার করার চেষ্টা করবে।

স্যাম্পলিংয়ের সমস্যা ছাড়াই চিত্রটি দেখতে, যুক্ত করুন

pack [label .i -image image1]

অবশেষে. (স্পষ্টতই, এটি ডিস্ক-সেভ বিকল্পের চেয়ে দীর্ঘ।


আপনি foreachদ্বারা বাইটগুলি প্রতিস্থাপন করতে পারেনlmap
সার্জিওল

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একটি সম্পূর্ণ উত্তর হবে না ?
LegionMammal978


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

পরীক্ষা রান:

Llama লামা বাইরে


1
-3 বাইট: এর from PIL import Image as Iপরে Imageফাংশনটির পরিবর্তেI
টিম Čas

আমি মোটামুটি নিশ্চিত যে কেবলমাত্র import Imageকাজ করবে, পুরো বাইটের লোড শেভ করবে
বিটা ডেকে

এর সাথে 11 বাইট সংরক্ষণ করুনfrom PIL.Image import*
অ্যারন

আমি মনে করি এটি দুর্ঘটনাক্রমে আলফা চ্যানেলটিকেও উল্টে দেয়। স্পষ্টতই evalফাংশনটি আলফা সহ সমস্ত "ব্যান্ড" এর বিপরীতে চলে। ফায়ারফক্স লোগোটি উল্টানোর
ডানা

1
@ ডানা ওপির মন্তব্য অনুযায়ী , আলফা চ্যানেলগুলিকে সমর্থন করা alচ্ছিক ।
মেগো

1

সি + stb_image + stb_image_writ, 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

ম্যাটল্যাব / অক্টোবায়, 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()))

ওপেনসিভি লাইব্রেরিতে চিত্রগুলি পড়তে, প্রক্রিয়া করতে এবং লেখার জন্য নম্পপি অ্যারে ব্যবহার করা হয়। নীচে এই স্ক্রিপ্টের একটি উদাহরণ পাওয়া গেছে যা মোজিলা.রোগরে পাওয়া একটি চিত্রকে উল্টো করে দেয়

এজ আর্টওয়ার্ক উল্টে গেছে

আলফা চ্যানেল সহ সমস্ত চ্যানেল উল্টানো হবে। স্বচ্ছতা রয়েছে এমন চিত্রগুলির জন্য এটি সমস্যাযুক্ত। তবে @ মেগো নির্দেশিত হিসাবে, আলফা চ্যানেলের জন্য সমর্থন isচ্ছিক।

নীচে একটি 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

নীচে প্রদর্শিত হিসাবে, এটি স্বচ্ছ পটভূমি সংরক্ষণের সময় ফায়ারফক্স লোগোটিকে উল্টোভাবে পরিচালনা করে।

ফায়ারফক্স লোগো উল্টে গেছে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.