首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“监控”形象

“监控”形象
EN

Code Golf用户
提问于 2017-04-06 20:11:12
回答 2查看 518关注 0票数 10

问题:

这个挑战来自我遇到的一个真正的问题。我在工作中安装了双显示器,我想用下面的图片作为我的壁纸:

然而,我的显示器有相当大的边框,当我设置我的背景时,它看起来像这样,码头出现的地方(码头?)被打破:

我能够解决这个问题,方法是用中心切出一个图像,然后把它拉回原来的大小,如下面的图像所示:

的挑战:

编写一个接收图像并对其进行“监视”的程序,以便与双监视器设置一起使用(即删除图像的中心部分,其中有边框)。这些规则如下:

  1. 它必须是一个完整的程序,它接受图像,或者作为路径(字符串参数等),或者以文件选择器对话框的形式。
  2. 程序必须以垂直线数(宽度为一个像素)作为输入,才能从图像的中心突出出来。
  3. 裁剪必须来自原始图像的中心(宽度方向)。
  4. 生成的图像必须重新调整到输入图像的原始大小。(这两部分可以单独缩放,然后串联,也可以串联,然后缩放。单独缩放会产生更好的图像/效果,但在现实世界中很难被注意到)
  5. 背景图像一般都是均匀的,因此为了使这一挑战变得更容易,输入图像将只有偶数像素,而要删除的行数也只有偶数。
  6. 这个挑战是代码高尔夫-以字节为单位的最短代码获胜。

好运!

EN

回答 2

Code Golf用户

回答已采纳

发布于 2017-04-10 13:01:52

倍频程,85字节

代码语言:javascript
复制
@(f,n)imsave(imresize((o=imread(f))(:,[1:(end-n)/2,(end+n)/2:end],:),size(o)(1:2)),f)

定义具有f文件名的匿名函数,并n要删除的列数。由于匿名函数需要一个表达式,所以使用内联赋值,这是MATLAB中不存在的特性。

MATLAB,98字节

作为奖励,我还得到了一个MATLAB兼容的答案。有趣的是,这只会长13个字节,因为Octave版本需要大量括号才能正确解析内联赋值。

代码语言:javascript
复制
function  m(f,n)
o=imread(f);imsave(imresize(o(:,[1:(end-n)/2,(end+n)/2:end],:),size(o(:,:,1))),f)
票数 1
EN

Code Golf用户

发布于 2017-04-06 20:13:13

Matlab 2013,150个字节

这是我在Matlab中的尝试。绝对不是最短的代码,但这是个开始。

警告,这将覆盖原始图像,因此请首先复制。

金色版

代码语言:javascript
复制
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

Ungolfed代码,改进了奇数图像大小和奇数列

代码语言:javascript
复制
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
票数 5
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/115616

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档