Моей первой мыслью для не-юникодной версии было сделать что-то вроде этого:
bool caseInsensitiveStringCompare(const string& str1, const string& str2) {
if (str1.size() != str2.size()) {
return false;
}
for (string::const_iterator c1 = str1.begin(), c2 = str2.begin(); c1 != str1.end(); ++c1, ++c2) {
if (tolower(*c1) != tolower(*c2)) {
return false;
}
}
return true;
}
Как насчет использования mogrify, части ImageMagick ? Если вам действительно нужно управлять этим из Perl, вы можете использовать Image :: Magick , Image :: Resize или Imager .
Если вы хотите сделать это программно, как я предполагаю, используйте PIL для изменения размера, например
newIm = im.resize((newW, newH)
, затем сохраните его в том же файле или в новом месте.
Пройдите через folder рекурсивно и примените функцию изменения размера ко всем изображениям.
Я придумал образец сценария, который, я думаю, вам подойдет. Вы можете улучшить его: возможно, сделать его графическим, добавить больше параметров, например, такое же расширение или может быть весь png, изменить размер выборки линейный / билинейный и т. Д.
import os
import sys
from PIL import Image
def resize(folder, fileName, factor):
filePath = os.path.join(folder, fileName)
im = Image.open(filePath)
w, h = im.size
newIm = im.resize((int(w*factor), int(h*factor)))
# i am saving a copy, you can overrider orginal, or save to other folder
newIm.save(filePath+"copy.png")
def bulkResize(imageFolder, factor):
imgExts = ["png", "bmp", "jpg"]
for path, dirs, files in os.walk(imageFolder):
for fileName in files:
ext = fileName[-3:].lower()
if ext not in imgExts:
continue
resize(path, fileName, factor)
if __name__ == "__main__":
imageFolder=sys.argv[1] # first arg is path to image folder
resizeFactor=float(sys.argv[2])/100.0# 2nd is resize in %
bulkResize(imageFolder, resizeFactor)
Может быть в оболочке?
mkdir resized
for a in *.jpg; do convert "$a" -resize 60% resized/"$a"; done
Если у вас> 1 ядра, вы можете сделать это следующим образом:
find . -maxdepth 1 -type f -name '*.jpg' -print0 | xargs -0 -P3 -I XXX convert XXX -resize 60% resized/XXX
-P3 означает, что вы хотите изменить размер до 3 изображений в в то же время (распараллеливание).
Если вам не нужно хранить оригиналы, вы можете использовать mogrify, но я предпочитаю использовать convert, а затем rm ...; mv ... - на всякий случай, если изменение размера (по какой-либо причине) не сработает.
Я использую Python с PIL (библиотека изображений Python). Конечно, для этого существуют специализированные программы.
Многие люди используют PIL для таких вещей. Посмотрите: Быстрое изменение размера изображения с помощью python
PIL очень мощный инструмент, и недавно я нашел этот рецепт: Добавление водяного знака к изображениям в пакете
вам нужно просто изменить его размер или вы хотите изменить размер программно? Если просто изменить размер, используйте PixResizer. http://bluefive.pair.com/pixresizer.htm
Use PerlMagick, it's an interface to the popular ImageMagick suite of command line tools to do just this kind of stuff. PythonMagic is available as well.