Имя: Пароль:
1C
1С v8
Чем добавить надпись в JPEG
,
0 necro
 
30.12.14
13:30
Чем можно надпись на JPEG (есть файл) нарисовать? Знаю, есть ImageMagick, но он уж очень большой.
Интересует только наложение надписи поверх изображения и всё.
1 Рэйв
 
30.12.14
13:31
пайнт
2 Рэйв
 
30.12.14
13:31
только фон прозрачный сделай
3 vicof
 
30.12.14
13:31
paint? :)
4 aka AMIGO
 
30.12.14
13:31
(0) а в пэинте? там вроде прозрачный фон для надписи можно изготовить
5 aka AMIGO
 
30.12.14
13:32
ну, и ладно.. :)
6 Peltzer
 
30.12.14
13:33
А если ему программно?
Может быть делать слияние двух джпегов - в одном брать только чёрные точки (из них состоит заранее написанная надпись), а во втором - оригинальный джпег.
7 Рэйв
 
30.12.14
13:34
(0)Ну только если ему это вместо пазла на НГ подарили:-)
8 Рэйв
 
30.12.14
13:34
(7) к (6)
9 necro
 
30.12.14
13:35
мне бы программно
10 polosov
 
30.12.14
13:37
(9) http://yahnev.ru/?p=720
Наверняка какая-то умеет с командной строкой работать.
11 Woldemar22LR
 
30.12.14
13:38
(9) в php пойдет
12 anatoly
 
30.12.14
13:38
(9) в 1С ?
13 necro
 
30.12.14
13:39
а там же вроде в теме написано, что она про 1С8, или я просмотрел?
14 necro
 
30.12.14
13:39
Согласен на paint, кто знает его командную строку?
15 polosov
 
30.12.14
13:41
16 anatoly
 
30.12.14
13:41
(13) я просто уточнил...
напиши тогда ДЛЛку, иначе наверное никак.
17 necro
 
30.12.14
13:44
(16) Старенький я уже, дллки писать, это мне уже Дельфи придется брать, а там дллка выйдет как раз как Image Magick. Всё же JPEG - это не BMP, просто так надпись не вкорячишь.
18 Лефмихалыч
 
30.12.14
13:46
xnview
faststone
19 anatoly
 
30.12.14
13:46
(17) загрузить на canvas и вперед - тексты писать, круги рисовать...
если дельфи 3/4/5/6 то с прилинкованой VCL около 300 кб выйдет.
20 Fragster
 
гуру
30.12.14
13:56
21 Jaap Vduul
 
30.12.14
14:06
pamcomp из пакета Netpbm
http://gnuwin32.sourceforge.net/packages/netpbm.htm
22 ssh2QQ6
 
30.12.14
14:22
(0) закажи Теме Лебедеву
23 necro
 
31.12.14
05:58
(20) В теме было всего 19 сообщений,в двух из которых уже было написано про этот пакет.
24 necro
 
31.12.14
06:50
В общем, ImageMagick для работы хватает двух файлов 12М, однако я что-то не могу заставить его не открывать консоль (вызов, так уж получилось, находится на сервере)
25 necro
 
31.12.14
06:51
вот мой метод:

КоманднаяСтрока = "mogrify -gravity north -fill white -undercolor black -pointsize 14 -annotate 0 "%Number% от %Date%, %WeightLong%, %Partner%, %Car%" %FileName%";
...
ЗапуститьПриложение(КоманднаяСтрока);
26 Эмбеддер
 
31.12.14
07:03
я скорей всего тоже пользовался ImageMagic
вот примеры вызовов:

identify -format %%w your_test_photo.jpg >dttmpfile
set /p width=<dttmpfile
Set /a pointsize=%width%/30
set /a s=%width%/30

convert your_test_photo.jpg -font Arial -pointsize %pointsize% -fill yellow -annotate +%s%+%s%  11:222 output.jpg
27 Эмбеддер
 
31.12.14
07:04
(25) -undercolor это цвет рамки? жаль, я не знал)))
28 necro
 
31.12.14
07:30
Короче сделал через WSCript.Shell.Run() - окно есть, но его не видно
undercolor - прямоугольник под текстом
29 Эмбеддер
 
31.12.14
07:50
(28) ясно, не то, что мне было нужно. лучше всего когда на фотографии надпись (время), например, желтым цветом, а контур надписи черный. будет хорошо видно на любом фоне. ImageMagic был промежуточный вариант, потом своей программой (в телефоне) стал рисовать время
30 anatoly
 
31.12.14
08:01
(15) а старую версию (GraphicsVK) использовал кто?
он не требует дотНЕТ ?
31 ИС-2
 
naïve
31.12.14
08:24
xnview? Поддреживает командную строку
32 IVT_2009
 
31.12.14
11:07
Если картинки фиксированного разрешения то я бы использовал программу на Яве примерно такого содержания:

static public void addData(String fn,String dr,String dstFld) throws IOException {
        /*
         * непосредственно обрабатывает файл
         * @имя файла который обрабатываем
         * @dr - где берем фото
         * @dstFld - куда ложим что обработали
         */
        File sourceFile     = new File(dr+"//"+fn);
        String stamp         = sourceFile.getName();
        System.out.println(stamp);
        BufferedImage bi    = ImageIO.read(sourceFile);
        Graphics2D graphics = bi.createGraphics();
        Font font             = new Font("ARIAL", Font.PLAIN, 20);
        graphics.setFont(font);
        graphics.setColor(Color.blue);
        graphics.drawString(stamp, bi.getWidth()-250, bi.getHeight()-25);
        bi.flush();
        String tmpDir         = dstFld+"//"+dirName(fn)+"//";
        createDir(tmpDir); //**проверим есть ли директория, иначе - создадим
        File target         = new File(tmpDir+fn);
        ImageIO.write(bi, "jpg", target);
    } //static public void addData(String fn,String dr) throws IOException
33 IVT_2009
 
31.12.14
11:09
Если надо всем файлам в каталоге надпись сделать вот полный текст программы:

import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
import javax.swing.ImageIcon;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JScrollPane;
import javax.swing.JButton;
import javax.swing.SwingUtilities;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JProgressBar;


public class timeStamp {
/*
* наносит время на фотографию
*/
static goLoad x1;    
private JFrame wtf;
    
    public static void main(String[] args) {
        begin();
    } //public static void main(String[] args)
    
    public static void begin() {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    timeStamp window = new timeStamp();
                    window.wtf.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }//public static void begin()
    
    public timeStamp() throws ClassNotFoundException, IOException {
        initialize();
    }
    
    private void initialize() throws ClassNotFoundException, IOException {
        wtf = new JFrame();
        wtf.setBounds(0, 0, 396, 211);
        wtf.getContentPane().setLayout(null);
        final JLabel lblInfo = new JLabel("ЖДУ...");
        lblInfo.setFont(new Font("Tahoma", Font.BOLD, 13));
        lblInfo.setBounds(10, 134, 360, 28);
        wtf.getContentPane().add(lblInfo);
        JButton btnNewButton = new JButton("Старт!");
        btnNewButton.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                SwingUtilities.invokeLater(new Runnable() {
                    public void run() {
                        //***тут надо стартовать поток обновления****
                        lblInfo.setText("РАБОТАЮ");
                        x1 = new goLoad();
                        x1.lbl = lblInfo;
                        x1.start();
                    }
                });
            }
        });
        btnNewButton.setBounds(10, 69, 158, 54);
        wtf.getContentPane().add(btnNewButton);
        
        JButton btnNewButton_1 = new JButton("Стоп");
        btnNewButton_1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                x1.stop();
            }
        });
        btnNewButton_1.setBounds(189, 69, 147, 54);
        wtf.getContentPane().add(btnNewButton_1);
    }//private void initialize() throws ClassNotFoundException, SQLException
} //public class addTime

class goLoad extends Thread {
    JLabel lbl;
    
    public void run()
    {
        try {
            beginProcessing(lbl);
        } catch (Exception e) {
            
        }
    } //public void run()
    
    public static void beginProcessing(JLabel lbl) throws IOException {
        beginData(getDir("Укажите имя папки в которой лежат фото")
                ,getDir("Укажите имя папки куда сохранить:"),lbl);
    } //public static void beginProcessing() throws IOException
    public static String getDir(String ops) throws IOException{
        /*
         * диалог выбора директории
         * @ops - заголовок окна выбора
         * вернет путь к выбранной директории
         */
        JFileChooser chooser = new JFileChooser();
        chooser.setCurrentDirectory(new java.io.File("."));
        chooser.setDialogTitle(ops);
        chooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        if (chooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {
            String r = chooser.getSelectedFile().getAbsolutePath();
            return r;
         }
        else {
            return null;
        }
    }//public String getDir()
    
    static public void beginData(String dr,String dstFld,JLabel lbl) throws IOException {
        /*
         * ищем файлы фотографий и обрабатываем их
         * @dr - где берем фото
         * @dstFld - куда ложим что обработали
         */
        File directory = new File(dr);
        File[] fList = directory.listFiles();
        for (File file : fList){
            if (file.getName().indexOf(".jpg") >0 ) {
                lbl.setText(String.valueOf(file.getName()));
                System.out.println(file.getName());
                addData(file.getName(),dr,dstFld);
            }
        }
    } //static public void beginData(String dr) throws IOException
    
    static public void addData(String fn,String dr,String dstFld) throws IOException {
        /*
         * непосредственно обрабатывает файл
         * @имя файла который обрабатываем
         * @dr - где берем фото
         * @dstFld - куда ложим что обработали
         */
        File sourceFile     = new File(dr+"//"+fn);
        String stamp         = sourceFile.getName();
        System.out.println(stamp);
        BufferedImage bi    = ImageIO.read(sourceFile);
        Graphics2D graphics = bi.createGraphics();
        Font font             = new Font("ARIAL", Font.PLAIN, 20);
        graphics.setFont(font);
        graphics.setColor(Color.blue);
        graphics.drawString(stamp, bi.getWidth()-250, bi.getHeight()-25);
        bi.flush();
        String tmpDir         = dstFld+"//"+dirName(fn)+"//";
        createDir(tmpDir); //**проверим есть ли директория, иначе - создадим
        File target         = new File(tmpDir+fn);
        ImageIO.write(bi, "jpg", target);
    } //static public void addData(String fn,String dr) throws IOException
    
    static void createDir(String adr){
        /*
         * проверим существование папки по адресу:
         * @adr
         * если она не существует , тогда ее создадим
         */
        File theDir = new File(adr);
          if (!theDir.exists())
          {
            System.out.println("creating directory: " + adr);
            boolean result = theDir.mkdir();  
            if(result){    
               System.out.println("DIR created");  
             }//if
            else {
                System.out.println("DIR NOT created");
            }
          }
    }//static void createDir(String adr)
    
    public static String dirName(String f) {
        /*
         * вернет дату из названия файла @f,
         * она будет именем директории
         */
        if(f==null) return "resizeDir";
        return f.split(" ")[0];
    }//public static String dirName(String f)
}
34 Злопчинский
 
31.12.14
18:44
Берем 1с и GFLax
И бабахаем надпись на картинки
У мну для ларечника одного так сделана мегасистемазаказа (мане и не снилось) - из заказа запускается впф которая для каждой номенклатуры вытягивает картинку и бабахает на нее надпись с названием и количеством закаываемого и выгружает на дропбокс
Клиент приезжает на рынок за товаром и тупо тыкает в планшет и показывает наборщикам сколько и чего надо
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой