3

我有图像文件,我想在文件名后面附加一个字符串,就在扩展名之前。

示例:example.png将变成example-2x.png

所以,我想-2x在扩展之前插入,可以是任何图像类型(png、jpg、gif 等)。

如果有一种简单的方法可以用 Ruby 做到这一点,那就太好了。

4

9 回答 9

9

Rake 有一个很好的字符串扩展来操作路径:

require 'rake/pathmap'

"images/example.png".pathmap "%X-2x%x"
#=> "images/example-2x.png"

来自pathmap的文档:

  • %X -- 除了文件扩展名之外的所有内容
  • %x -- 路径的文件扩展名。如果没有扩展名,则为空字符串。
于 2013-06-13T19:45:16.903 回答
2

这似乎有效

img[/(\.\w+)/] = "-2x#{$1}"


img1 = 'foo.png'
img1[/(\.\w+)/] = "-2x#{$1}"
img1 #=> "foo-2x.png"


img2 = 'foo.bar.jpg'
img2[/(\.\w+)/] = "-2x#{$1}"
img2 #=> "foo-2x.png.jpg"
于 2013-06-13T19:06:54.190 回答
1
def insert_before_last_dot(str, part)
  idx = str.rindex('.')
  return str if (idx.nil? || idx==0)
  str.clone.tap { |x| x[idx] = part.to_s + '.' }
end

insert_before_last_dot('foo.jpg', '-2px') # => "foo-2px.jpg"
insert_before_last_dot('foo.bar.jpg', '-2px') # => "foo.bar-2px.jpg"
insert_before_last_dot('foo') # => "foo"
于 2013-06-13T19:05:23.693 回答
1

这就是我最终做的事情,它似乎在几乎任何文件类型中都能很好地工作。

image = 'example.png'
ext = File.extname(image)
image_2x = image.gsub(ext, "-2x"+ext)
于 2013-06-13T19:29:43.970 回答
1

使用 basename 和 extname 提取您想要的两个部分:

于 2013-06-13T19:01:40.047 回答
0

如果您在 Linux 环境中工作,该rename功能应该可以工作。

rename {,\-2x,*}.png

在 tcsh 和 bash shell 中,这扩展为rename .png \-2x.png *.png

于 2013-06-13T19:21:41.810 回答
0

string.lastIndexOf()我自己不知道 ruby​​,但我希望在 java中有某种类似的东西。所以你基本上只是找到最后一个点,将字符串拆分,然后将它与-2x

于 2013-06-13T19:02:32.440 回答
0
> "example.png".gsub /\.[^\.]*$/, "-2x\\0"
=> "example-2x.png" 
于 2013-06-14T08:33:31.007 回答
0

我确信以上所有答案都比我的更合适,但我发现使用替换功能很有效......

目录 | 重命名项目 -NewName {$_.name -replace ".pdf"," - 2012.pdf"}

因此,您只需获取文件扩展名 .png 并将其替换为 -2x.png

这应该适用于任何文件扩展名,因为您只是用相同甚至不同的文件扩展名替换它,并在文件扩展名之前添加您想要的任何文本。

于 2019-04-09T14:53:09.370 回答