|
Чем добавить надпись в 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
И бабахаем надпись на картинки У мну для ларечника одного так сделана мегасистемазаказа (мане и не снилось) - из заказа запускается впф которая для каждой номенклатуры вытягивает картинку и бабахает на нее надпись с названием и количеством закаываемого и выгружает на дропбокс Клиент приезжает на рынок за товаром и тупо тыкает в планшет и показывает наборщикам сколько и чего надо |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |