IE 2016

Поворот картинки

Опубликовал bborisko в раздел Программирование - Практика программирования

Иногда возникает необходимость повернуть картинку из 1С.

К сожалению 1С не умеет поворачивать изображения. Мне уже несколько раз подобныен задачи приходилась решать. Приходиться выкручиваться, используя внешние компоненты или предустановленные программы. Это бывает не всегда удобно, так как требует предварительной установки.

Хочу предложить свой вариант решения - была написана небольшая консольная утилитка, которая вызывается из 1с и осуществляет поворот.

Параметры вызова:

               исходный файл, /u:угол,/fs:конечный файл 

               Версия 0.35:

               Добавил: [/q:] - Качество сохранения для Jpeg (от 1 до 10) по умолчанию 7

                               [/c:] - bw - перевести картинку в чб, gs - в оттенки серого (gs2 - другой пресет перевода)

                      Обновил обработку - теперь она демонстрирует и вариант работы с цветом.

Если не задан конечный файл, то измененная картинка будет записанна в исходный, угол по умолчанию 90.

Если конечный файл задать другого формата - то будет произведена конвертация.

Работает с форматами bmp,jpg,png,tiff. Конвертация в tiff не поддерживается.

 

В файле программа и демо - обработка. Будьте внимательны - обработка сохраняет трансформированное изображение в исходный файл.

 

 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
miniRotate
.zip 821,22Kb
21.12.13
24
.zip 821,22Kb 24 Скачать

См. также

Лучшие комментарии

4. cool.vlad4 16.12.2013 15:54
(2) bborisko, но зато он проверен временем и открытостью кода. к тому же там com сервер есть, что позволяет его и на сервере приложений использовать.
+ 2 [ gaglo; baton_pk; ]
# Ответить
6. salexdv 16.12.2013 16:46

Комментарии

2. bborisko 16.12.2013 15:26
Вот только размер у imagemagick большой.
Ответили: (3) (4)
# Ответить
3. baton_pk 16.12.2013 15:45
(2) bborisko, не поспоришь.
Но для установки на сервер для обработки картинок на сервере - самое то.
# Ответить
4. cool.vlad4 16.12.2013 15:54
(2) bborisko, но зато он проверен временем и открытостью кода. к тому же там com сервер есть, что позволяет его и на сервере приложений использовать.
+ 2 [ gaglo; baton_pk; ]
# Ответить
5. cool.vlad4 16.12.2013 16:04
вот кстати, что было бы несколько интереснее, это "интеллектуальный" поворот. когда осуществляется поворот скана в правильное для чтения положение.
# Ответить
6. salexdv 16.12.2013 16:46
7. cool.vlad4 16.12.2013 16:55
(6) salexdv, кстати до кучи можно добавить туда метод создания прозрачной картинки. вот нарыл откуда-то, с тех пор использую
 /// <summary>  
        /// Returns a transparent background GIF image from the specified Bitmap.  
        /// </summary>  
        /// <param name="bitmap">The Bitmap to make transparent.</param>  
        /// <param name="color">The Color to make transparent.</param>  
        /// <returns>New Bitmap containing a transparent background gif.</returns>  
        public static Bitmap MakeTransparentGif(Bitmap bitmap, Color color)
        {
            byte R = color.R;
            byte G = color.G;
            byte B = color.B;
            MemoryStream fin = new MemoryStream();
            bitmap.Save(fin, System.Drawing.Imaging.ImageFormat.Gif);
            MemoryStream fout = new MemoryStream((int)fin.Length);
            int count = 0;
            byte[] buf = new byte[256];
            byte transparentIdx = 0;
            fin.Seek(0, SeekOrigin.Begin);
            //header  
            count = fin.Read(buf, 0, 13);
            if ((buf[0] != 71) || (buf[1] != 73) || (buf[2] != 70))
                return null; //GIF  
            fout.Write(buf, 0, 13);
            int i = 0;
            if ((buf[10] & 0x80) > 0)
            {
                i = 1 << ((buf[10] & 7) + 1) == 256 ? 256 : 0;
            }
            for (; i != 0; i--)
            {
                fin.Read(buf, 0, 3);
                if ((buf[0] == R) && (buf[1] == G) && (buf[2] == B))
                {
                    transparentIdx = (byte)(256 - i);
                }
                fout.Write(buf, 0, 3);
            }
            bool gcePresent = false;
            while (true)
            {
                fin.Read(buf, 0, 1);
                fout.Write(buf, 0, 1);
                if (buf[0] != 0x21)
                    break;
                fin.Read(buf, 0, 1);
                fout.Write(buf, 0, 1);
                gcePresent = (buf[0] == 0xf9);
                while (true)
                {
                    fin.Read(buf, 0, 1);
                    fout.Write(buf, 0, 1);
                    if (buf[0] == 0)
                        break;
                    count = buf[0];
                    if (fin.Read(buf, 0, count) != count)
                        return null;
                    if (gcePresent)
                    {
                        if (count == 4)
                        {
                            buf[0] |= 0x01;
                            buf[3] = transparentIdx;
                        }
                    }
                    fout.Write(buf, 0, count);
                }
            }
            while (count > 0)
            {
                count = fin.Read(buf, 0, 1);
                fout.Write(buf, 0, 1);
            }
            fin.Close();
            fout.Flush();
            return new Bitmap(fout);
        }
...Показать Скрыть
Ответили: (8)
# Ответить
8. salexdv 16.12.2013 17:06
(7) Каково практическое применение этого?
Ответили: (9)
# Ответить
9. cool.vlad4 16.12.2013 17:08
(8) salexdv, печати, факсимиле. такое же как и у http://infostart.ru/public/186861/
Ответили: (10) (11)
# Ответить
10. salexdv 16.12.2013 17:16
(9) Я понял, надо будет доработать. Спасибо за идею!
# Ответить
11. mzelensky 18.12.2013 09:43
(9) cool.vlad4, Я бы лучше добавил не "прозрачность", а возможность добавления "Шумов". Для факсимиле и печатей это более интересно будет.
# Ответить
12. sikuda (файл скачал) 20.12.2013 17:26
(0) Хорошее, но тяжелое решение(из пушки по воробьям). Написал попроще http://infostart.ru/public/242659/
# Ответить
13. VitalMakarr 11.03.2015 06:27
Зачем ограничиваться узкими возможностями. Попробуйте http://infostart.ru/public/322956/
# Ответить
Внимание! За постинг в данном форуме $m не начисляются.
Внимание! Для написания сообщения необходимо авторизоваться
Текст сообщения*
Прикрепить файл






IE 2016