Как повернуть рисунок на произвольный угол без потери качества?
gimp
Совсем без потери невозможно, если угол не кратен 90 градусам. Но с незаметными потерями вышеупомянутый Гимп тебе это вполне сделает.
mkdir ../rotated
for i in
Спасибо! - то, что нужно!
рисунок на каком носителе? бумага?
Если рисунок пиксельный, то для поворота стоит увеличить площадь холста раза в четыре, чтобы уменьшить потери качества
эта команда работать не будет.
mogrify вообще-то
Можешь посмотреть как он даже на малых порядках делает все остальные.
http://bigwww.epfl.ch/demo/jrotation/start.php
и никто даже не спросил, в каком формате рисунок храниццо.
Думаешь там векторная?
все может быть, да и не векторные тоже по-разному поворачиваются в зависимости от формата.
эта команда работать не будет.Исправил
mogrify вообще-тоЯ предпочитаю оставлять оригиналы на всякий случай.
если будут файлы с пробелами - все равно не будет работать.
Даже когда пользовался видной, ставил программы в c:/progra~1
это не отменяет неправильность скрипта.
Если предложишь его исправленную версию, никто не обидится.
как-то так, например.
никто не обидется.щас уже другой человек обидится
for i in `ls *.jpg`; do
Никогда не понимал гениев, пишущих такое странное.
Объясните мне, кто-нибудь, ну зачем делать это `ls *.jpg`,
если и без него всё прекрасно работает?
---
"...Видный ретроград-новатор."
Не менее гениальная конструкция, чем вышеупомянутая "`ls *.jpg`".
Чем это отличается от просто "ls *jpg | xargs ..."?
Если бы ты "-type f" писал или "-print0", было бы ещё как-то понятно.
Ещё. Когда используешь какую-либо странную команду,
очень полезно помнить, что именно она означает:
$ cd /bin && ls | xargs echo {} LOOK!
{} LOOK! [ cat chio chmod cp cpio csh date dd df domainname echo ed expr hostname kill ksh ln ls mkdir mt mv pax ps pwd rcmd rcp rm rmdir sh sleep stty sync tar test
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Вот и я про это подумал.
---
Q5: а нафига A4?
A5: чтоб сосать.
null:~/tmp$ ls *1*
2008.03.03-13.22.49.png 2009.05.13-22.09.54.png debian-20090117-kfreebsd-i386-install.iso pppoj.1.cpp script1.js
2009.05.13-22.07.03.png 2009.05.13-22.17.05.png libqca2_2.0.2-1_i386.deb psi_0.12.1-2_i386.deb
1 1:
null:~/tmp$ find . -maepth 1 -name "*1*"
./1 1
./2008.03.03-13.22.49.png
./2009.05.13-22.07.03.png
./debian-20090117-kfreebsd-i386-install.iso
./libqca2_2.0.2-1_i386.deb
./pppoj.1.cpp
./2009.05.13-22.09.54.png
./psi_0.12.1-2_i386.deb
./script1.js
./2009.05.13-22.17.05.png
ЗЫ я не утверждал что моя команда абсолютно правильная.
Вот и подумай над тем, что "ls" и "ls | cat"
рисуют совершенно разные картинки.
---
"Narrowness of experience leads to narrowness of imagination."
ls нужен чтоб вступить в пробелыи как поможет?
:~$ ls|grep qwe
qwe
qwe qwe
:~$ for i in `ls qwe*`;do echo 1;done
1
1
1
>рисуют совершенно разные картинки.
а теперь поиграем в игру найди 10 различий
У тебя или COLUMNS выставлена неправильно, или что-то сломано.
Терминалы или сам ls --- без разницы.
Классическое поведение такое:
$ ls /bin
[ cpio domainname kill mt rcmd sleep
cat csh echo ksh mv rcp stty
chio date ed ln pax rm sync
chmod dd expr ls ps rmdir tar
cp df hostname mkdir pwd sh test
$ ls /bin | cat
[
cat
chio
chmod
cp
cpio
csh
date
dd
df
domainname
echo
ed
expr
hostname
kill
ksh
ln
ls
mkdir
mt
mv
pax
ps
pwd
rcmd
rcp
rm
rmdir
sh
sleep
stty
sync
tar
test
---
"Narrowness of experience leads to narrowness of imagination."
ты успешно в них и вступил. рад?
рад?нет. Вступить я мог бы и без ls. Ладно, туплю я
Прекрасно помогает:
$ :> /tmp/test
$ :> "/tmp/another test"
$ ls /tmp | grep test
another test
test
$ for f in /tmp/*test; do echo $f; done
/tmp/another test
/tmp/test
$ for f in `ls /tmp/*test`; do echo $f; done
/tmp/another
test
/tmp/test
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
>Терминалы или сам ls --- без разницы.
ты неправ - ничего не сломано и COLUMNS выставлена правильно.
про то как должно выглядеть классическое поведение я в курсе, просто решил что нельзя такую явную ошибку оставлять незамеченной.
Скрипт предполагая в текущей директории tiff-файлы с будущими шпорами, выдает два djvu файла odd.djvu и even.djvu, которые потом можно распечатать на разных сторонах и получить двухстронные шпоры с четным файлом на одной стороне и с нечетным на другой.
#!/bin/sh
k=0
mkdir odd
mkdir even
mkdir -p res/odd
mkdir -p res/even
mkdir -p djvu/odd
mkdir -p djvu/even
for i in `ls *.tiff`
do
if expr $k = 0
then
cp $i ./even
k=1
else
cp $i ./odd
k=0
fi
done
k=0
ind=1000
for i in `ls odd/*.tiff`
do
case $k in
0)
f0=$i
k=1
;;
1)
f1=$i
k=2
;;
2)
f2=$i
k=3
;;
3)
f3=$i
k=4
;;
4)
f4=$i
k=5
;;
*)
k=0
f5=$i
montage -geometry +0+0 $f0 $f1 $f2 $f3 $f4 $f5 ./res/odd/$ind.tiff
;;
esac
ind=$(expr $ind + 1)
done
montage -geometry +0+0 $f0 $f1 $f2 $f3 $f4 $f5 ./res/odd/$ind.tiff
k=0
ind=1000
for i in `ls even/*.tiff`
do
case $k in
0)
f0=$i
k=1
;;
1)
f1=$i
k=2
;;
2)
f2=$i
k=3
;;
3)
f3=$i
k=4
;;
4)
f4=$i
k=5
;;
*)
k=0
f5=$i
montage -geometry +0+0 $f2 $f1 $f0 $f5 $f4 $f3 ./res/even/$ind.tiff
;;
esac
ind=$(expr $ind + 1)
done
montage -geometry +0+0 $f2 $f1 $f0 $f5 $f4 $f3 ./res/even/$ind.tiff
for i in `ls ./res/odd`; do cjb2 ./res/odd/$i ./djvu/odd/$i.djvu; done
for i in `ls ./res/even`; do cjb2 ./res/even/$i ./djvu/even/$i.djvu; done
djvm -c odd.djvu `ls ./djvu/odd/*.djvu`
djvm -c even.djvu `ls ./djvu/even/*.djvu`
rm -rf res
rm -rf djvu
Интересно за это у многих возникнет желание меня анально покарать?
Нет, потому что большинство точно такие же кодеры.
> for i in `ls odd/*.tiff`
> djvm -c odd.djvu `ls ./djvu/odd/*.djvu`
Интересно, ты вообще, читаешь, что тебе пишут, или нет?
> cp $i ./even
В таких случаях лучше делать "ln -s" или "ln".
> ind=$(expr $ind + 1)
Даже в альмквистовых оболочках есть $expr но это ладно.
Ну и обычная проблема с параллельным исполнением скриптов,
мантра на сегодня --- mktemp(1).
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Интересно, ты вообще, читаешь, что тебе пишут, или нет?Я этот скрипт раньше намного написал. Теперь само собой так писать не стану. Но не исправлять же это во всех своих старых скриптах.
В таких случаях лучше делать "ln -s" или "ln".Спасибо, хорошее замечание.
Даже в альмквистовых оболочках есть $expr но это ладно.Каких оболочках? Даже гугл о таких не знает
http://www.google.ru/search?q=%D0%B0%D0%BB%D1%8C%D0%BC%D0%BA...
Вообще я что-то подобное видел в чужих скриптах, но сам учился шелу по книге Кернигана и Пайка, которой лет наверное больше чем мне самому.
мантра на сегодня --- mktemp(1).Что-то после прочтения мана так и не понял что оно такого сверхординароного делает. Если ты про то, что можно запустить одновременно два экземпляра одного и того же скрипта, то я по заветам той же книги называю временные файлы с $$ на конце. Только этого скрипта подобное не касается. он работает в текущей директории, а смысла запускать его дважды в одной и той же директории нет. Если перенесу временные файлы в /tmp то припишу к ним $$
Вообще я думал, самое большое негодование вызовет странный case. Чую можно это более по-человечески сделать, но не знаю как.
Исправлять. А то так всю жизнь и будешь без пробелов жить.
> Каких оболочках? Даже гугл о таких не знает
Чё?
http://www.google.com/search?q=almquist+shell
> Вообще я что-то подобное видел в чужих скриптах, но сам учился
> шелу по книге Кернигана и Пайка, которой лет наверное больше
> чем мне самому.
Прочитать sh(1) несложно, он короткий.
> Если ты про то, что можно запустить одновременно два
> экземпляра одного и того же скрипта, то я по заветам той же
> книги называю временные файлы с $$ на конце.
Где-то на сайте CERT или чего-то подобного лежит руководство,
где объяснено, почему такого делать не надо.
> Вообще я думал, самое большое негодование вызовет странный case.
> Чую можно это более по-человечески сделать, но не знаю как.
Да, это ужасно, но чутьё может быть обманчиво:
a=1
eval b$a=2
eval echo '$'b$a
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."
Прочитать sh(1) несложно, он короткий.1300 строк на английском на мой взгляд многовато
я быстрее и легче прочту пару глав в книжке на русском.
Где-то на сайте CERT или чего-то подобного лежит руководство,
где объяснено, почему такого делать не надо.
Ну а вкратце можешь сказать что не так?
Да, это ужасно, но чутьё может быть обманчиво:
a=1
eval b$a=2
eval echo '$'b$a
Замечательно, спасибо, внесу в скрипт. Это его чуть ли не в 2 раза укоротит по количеству строк.
Ищи где-то там.
> Это его чуть ли не в 2 раза укоротит по количеству строк.
Иногда проще переписать всё на настоящем языке программирования (фортране
например --- TCL.
---
"This user is BSD-compliant."
Иногда проще переписать всё на настоящем языке программирования (фортранеДумаю не в моем случае.
Оставить комментарий
Yomin
Чем можно повернуть рисунок на произвольный угол без потери качества? Порекомендуйте бесплатную программу, которая может это делать? Спасибо!