একটি চিত্র "মনিটরিজ" করুন


9

সমস্যাটি:

এই চ্যালেঞ্জটি আসছিল এমন একটি আসল সমস্যা থেকে। আমার কর্মক্ষেত্রে দ্বৈত মনিটর সেটআপ রয়েছে এবং আমি নিম্নলিখিত চিত্রটি আমার ওয়ালপেপার হিসাবে ব্যবহার করতে চেয়েছিলাম:

আদর্শ চিত্র

যাইহোক, আমার মনিটরের বেশ তাৎপর্যপূর্ণ বেজেল রয়েছে এবং আমি যখন আমার ব্যাকগ্রাউন্ড সেট করি তখন এটি এমন কিছু দেখায়, যেখানে পিয়ারটি (অ্যাপিয়ার্স?) ভাঙার জন্য প্রদর্শিত হয়:

ইস্যু ইমেজ

কেন্দ্রটি কেটে নিয়ে একটি চিত্র তৈরি করে আমি এটি সমাধান করতে সক্ষম হয়েছি এবং তারপরে নীচের চিত্রের মতো এটি আবার মূল আকারে প্রসারিত করেছি:

চ্যালেঞ্জ চিত্র


চ্যালেঞ্জ:

একটি চিত্র লিখুন যা একটি চিত্র গ্রহণ করে এবং এটি একটি দ্বৈত মনিটর সেটআপ (যেমন ইমেজের মাঝের অংশটি মুছে দেয়, যেখানে বেজেলগুলি রয়েছে) ব্যবহারের জন্য এটি "মনিটরিজ" করে। নিয়মগুলি নিম্নরূপ:

  1. এটি অবশ্যই একটি সম্পূর্ণ প্রোগ্রাম যা চিত্রটিকে (স্ট্রিং আর্গুমেন্ট ইত্যাদি) হিসাবে গ্রহণ করবে বা ফাইল চয়নকারী ডায়ালগ আকারে চিত্রটি গ্রহণ করবে।
  2. প্রোগ্রামটি অবশ্যই ইনপুট হিসাবে চিত্রের কেন্দ্র থেকে ক্রপ করার জন্য উল্লম্ব রেখার সংখ্যা (প্রস্থে একটি পিক্সেল) নেবে
  3. শস্যটি অবশ্যই মূল চিত্রের কেন্দ্র (প্রস্থ অনুসারে) থেকে আসতে হবে
  4. ফলস্বরূপ চিত্রটি অবশ্যই ইনপুট চিত্রের মূল আকারে আবার মাপতে হবে। (হয় অর্ধেকটি পৃথকভাবে পৃথকভাবে মাপানো যায়, এবং তারপরে সংক্ষিপ্ত, বা সংক্ষিপ্ত আকারে এবং তারপর মাপানো যায় individ স্বতন্ত্রভাবে পৃথকভাবে স্কেলিং একটি ভাল চিত্র / প্রভাব তৈরি করে, তবে বাস্তব বিশ্বে এটি খুব কমই লক্ষণীয়)
  5. পটভূমি চিত্রগুলি সাধারণত সমান, তাই এই চ্যালেঞ্জটিকে আরও সহজ করার জন্য, ইনপুট চিত্রগুলিতে কেবলমাত্র বহু সংখ্যক পিক্সেল থাকবে এবং সরানোর জন্য লাইনগুলির সংখ্যা কেবল একই রকম হবে।
  6. এই চ্যালেঞ্জটি হ'ল কোড গল্ফ - বাইট জেতে সংক্ষিপ্ততম কোড

শুভকামনা!


2
1. অপারেশনটি কী তা ছবিগুলি থেকে খুব স্পষ্ট নয়, কারণ সেগুলি একই প্রস্থে মাপা হয়েছে। সম্ভবত প্রথম এবং শেষের চিত্রগুলি এমন চিত্রগুলির সাথে প্রতিস্থাপন করুন যা মাঝেরটির মতো একই আকারের এবং সাদা প্যাডযুক্ত? ২. আমরা যে কোনও ধরণের উদ্ধার ব্যবহার করতে পারি (লিনিয়ার সম্ভবত সবচেয়ে সস্তা) বা এটি একটি নির্দিষ্ট (যেমন কিউবিক, সিন্ক ইত্যাদি) হতে হবে?
পিটার টেলর

@ পিটারটেলর নিয়ম 3 অনুসারে, ইনপুট এবং আউটপুট চিত্রগুলি একই প্রস্থের বলে মনে করা হচ্ছে। হয় প্রতিটি অর্ধেকটি মূল প্রস্থের অর্ধেক আকারে পরিবর্তন করা হয় এবং তারপরে সংক্ষিপ্ত করা হয়, বা কাটা অংশগুলি অর্ধবৃত্ত করা হয়, তারপরে মূল আকারে ফিরে মেশানো হয়। এবং হ্যাঁ, যে কোনও স্কেলিং ঠিক আছে।
dberm22

"সম্ভবত" বাক্যটির সূচনাটি কীভাবে প্রশ্নটিকে সহজ করে বোঝার জন্য একটি পরামর্শ ছিল, চ্যালেঞ্জটির প্রস্তাবিত ব্যাখ্যা নয়। আমি নিজেই পরিবর্তন করেছি।
পিটার টেলর

@ পিটারটেলর আহ, আমি দেখছি, এটি আরও স্পষ্ট করে তোলে। ধন্যবাদ।
dberm22

আমরা কি ধরে নিতে পারি যে চিত্রটি ল্যান্ডস্কেপ ভিত্তিক হবে?
স্কট মিলনার

উত্তর:


1

অক্টাভা, 85 বাইট

@(f,n)imsave(imresize((o=imread(f))(:,[1:(end-n)/2,(end+n)/2:end],:),size(o)(1:2)),f)

fফাইলের নাম এবং nঅপসারণের জন্য কলামগুলির সংখ্যা সহ একটি বেনামী ফাংশন সংজ্ঞায়িত করে । যেহেতু একটি বেনামে ফাংশনটির জন্য একটি একক অভিব্যক্তি প্রয়োজন, ইনলাইন অ্যাসাইনমেন্ট ব্যবহৃত হয়, এটি একটি বৈশিষ্ট্য যা ম্যাটল্যাবে উপস্থিত নেই।

ম্যাটল্যাব, 98 বাইট

বোনাস হিসাবে, আমি একটি ম্যাটল্যাব সুসংগত উত্তর গল্ফ করেছি। মজার বিষয় হল এটি আর মাত্র 13 বাইট দীর্ঘ, যেহেতু অক্টাভা সংস্করণটির ইনলাইন কার্যগুলি সঠিকভাবে পার্স করার জন্য প্রচুর বন্ধনী প্রয়োজন।

function  m(f,n)
o=imread(f);imsave(imresize(o(:,[1:(end-n)/2,(end+n)/2:end],:),size(o(:,:,1))),f)

5

মতলব 2013, 150 বাইট

মতলবতে আমার চেষ্টা এখানে। অবশ্যই সংক্ষিপ্ততম কোড হবে না, তবে এটি একটি শুরু।

সতর্কতা, এটি মূল চিত্রটি ওভাররাইট করে, তাই প্রথমে একটি অনুলিপি তৈরি করুন।

গল্ফ সংস্করণ

function  mi(f,n)
o=imread(f);
s=size(o);
imwrite([imresize(o(:,1:((s(2)-n)/2),:),[s(1),s(2)/2]) imresize(o(:,((s(2)+n)/2):end,:),[s(1),s(2)/2])], f);
end

বিজোড় চিত্রের মাপের জন্য এবং কলামের বিজোড় সংখ্যার উন্নতির সাথে অগল্ফড কোড

function  monitorizeImage( filename, num_columns )

orig = imread(filename);
orig_size = size(orig);

f = factor(orig_size(2));
origsize_iseven = f(1)==2;

f = factor(num_columns);
num_columns_iseven = f(1)==2;

odd_even_size_mismatch = xor(origsize_iseven,num_columns_iseven);

img_resized = imresize(orig,[orig_size(1) orig_size(2)+odd_even_size_mismatch]);

leftimg = img_resized(:,1:((orig_size(2)+odd_even_size_mismatch-num_columns)/2),:);
leftimg = imresize(leftimg,[orig_size(1),floor(orig_size(2)/2)]);
rightimg = img_resized(:,((orig_size(2)-odd_even_size_mismatch+num_columns)/2):end,:);
rightimg = imresize(rightimg,[orig_size(1),floor(orig_size(2)/2)]);

monitorized_image = [leftimg rightimg];
monitorized_image = imresize(monitorized_image,[orig_size(1),orig_size(2)+ ~origsize_iseven]);

[~, ~, ext] = fileparts(filename); 

imwrite(monitorized_image,strcat(filename(1:end-length(ext)),'_',num2str(num_columns),ext));

end

কেবল এটিতে যুক্ত করুন: চ্যালেঞ্জগুলির উত্তরগুলি অবশ্যই প্রদত্ত স্কোরিং মানদণ্ডের জন্য অনুকূলকরণের জন্য একটি গুরুতর প্রচেষ্টা করতে হবে। একটি কোড-গলফ এই এক মত চ্যালেঞ্জ, তার মানে কোনো সুস্পষ্ট উন্নতি যে কোড দৈর্ঘ্য কমে যাবে তৈরি করা আবশ্যক যে।

অব্যবহৃত স্থান এবং সাদা স্থান সরিয়ে দেওয়ার চেষ্টা করুন।
dkudriavtsev

@ ais523 ধন্যবাদ 220 বাইট ডাউন!
dberm22

এছাড়াও, প্রতিটি দ্বি-বাইট পরিবর্তনশীল এক থেকে অনেক বেশি। পাঠযোগ্যতা গুরুত্বপূর্ণ নয়, সুতরাং osবর্ণমালার অন্য কোনও চিঠির জন্য রিফ্যাক্টর ইত্যাদি! এবং কেন fপুরো চিত্রটি কেবল সংরক্ষণ করতে ইনপুট চিত্রটিতে ফিরে যান না strcat? (যা, প্রসঙ্গক্রমে, আপনার দ্বারা প্রতিস্থাপন করতে পারেন ['',...]বরং strcat(...))
Sanchises

@ সাঞ্চাইজস থ্যাঙ্কস, এটি ছিল অসম্পূর্ণ / উন্নত সংস্করণ থেকে একটি বাকী। বিধিগুলিতে কোনও কিছুই এটি ওভাররাইট করতে পারে না, বা সুন্দর নামকরণের আউটপুট রাখার দরকার নেই। ধন্যবাদ ... যে বাইট গণনাটি 70 বাইট কমিয়েছে!
dberm22

3

ওল্ফ্রাম ভাষা, 134 , 127 , 119 111 বাইট

f[i_,c_]:=(d=ImageDimensions@i;ImageAssemble[ImageTake[i,a=All,#]&/@{{0,e=-#&@@d/2-c/2},{-e,a}}]~ImageResize~d)

fপ্রথম ইনপুট হিসাবে একটি চিত্র গ্রহণ করে এমন একটি ফাংশন তৈরি করে (ম্যাথমেটিকা ​​বা ওল্ফ্রাম ক্লাউডের প্রতীক হিসাবে) এবং দ্বিতীয় ইনপুট হিসাবে একটি পূর্ণসংখ্যা।

অসমাপ্ত :

f[image_,columns_]:=(  (*Define Function*)
    d=ImageDimensions[image];  (*Get image dimensions*)
    e=d[[1]]/2+columns/2;  (*Add half the image width to half the number of removed columns*)
    ImageResize[ImageAssemble[Map[ImageTake[i,All,#]&,{{0,-e},{e,All}}]],d]  (*Map the function onto a list with the desired column ranges and merge and scale the resulting image*)
)

প্রযুক্তিগতভাবে, কোনও চিত্রের মাত্রা ৩2২,৮৮০ পিক্সেলের বেশি হলে এটি সঠিকভাবে কাজ করবে না, তবে আমি ধরে নিই যে এটি ঠিক আছে, কারণ সমস্যাটি (এবং কিছু কম্পিউটার) এর বাইরে নয়। সংশোধন করা হয়েছে!


2

পিএইচপি, 206 বাইট

($c=imagecopyresized)($t=imagecreatetruecolor($w=imagesx($s=imagecreatefrompng($argv[1])),$h=imagesy($s)),$s,0,0,0,0,$v=$w/2,$h,$x=$v-$argv[2]/2,$h);$c($t,$s,$v,0,$w-$x,0,$v,$h,$x,$h);imagepng($t,$argv[3]);

তিনটি কমান্ড লাইন আর্গুমেন্ট গ্রহণ করে: উত্স ফাইলের নাম, ক্রপ করতে লাইন সংখ্যা এবং লক্ষ্য ফাইল নাম। সাথে চালাও -r

আপনি আরও ভাল ফলাফলের জন্য (+2 বাইট) এর imagecopyresampledপরিবর্তে ব্যবহার করতে চাইতে পারেন imagecopyresized

ungolfed

$s=imagecreatefrompng($argv[1]);    # load source image
$w=imagesx($s);$h=imagesy($s);      # get image dimensions
$t=imagecreatetruecolor($w,$h);     # create target image
$v=$w/2;                            # $v = half width
$x=$v-$argv[2]/2;                   # $x = width of remaining halves
                                    # resize and copy halves:
imagecopyresized($t,$s, 0,0,    0,0,$v,$h,$x,$h);
imagecopyresized($t,$s,$v,0,$w-$x,0,$v,$h,$x,$h);
imagepng($t,$argv[3]);              # save target image

আমি পিএনজি ফলাফল এসটিডিওউটে পাঠিয়ে আরও 9 টি বাইট সঞ্চয় করতে পারি ... তবে কীসের জন্য?


"আমি পিএনজি ফলাফল এসটিডিওউটে পাঠিয়ে আরও 9 টি বাইট সঞ্চয় করতে পারলাম ... তবে কীসের জন্য?" তাহলে আপনি কিছু চালাতে পারেন php -r image.php image.png 1 > output.png, তাই না?
28
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.