Войти

Показать полную графическую версию : [решено] Наложение таблицы(сетки) на рисунок


LilLoco
08-10-2011, 12:18
Здравствуйте. Есть рисунок 220*70 мм. Нужно поверх картинки нарисовать сетку (размер ячейки 10*10) с возможностью объединения этих ячеек. Подскажите какими средствами можно это осуществить. И как приблизительно. Заранее очень очень благодарен.

Сейчас сделал в Word, но может есть какой - либо еще вариант?

ferget
08-10-2011, 12:50
в Corel Draw есть Graph Paper Tool

в photoshop можно с помощью направляющих и привязки

LilLoco
08-10-2011, 12:58
ferget, А не могли бы вы поподробнее написать?) Совсем не знаком с работой с графикой :(

vadblm
08-10-2011, 13:29
Не очень понятно, что значит с возможностью объединения этих ячеек »
Но возможно сгодится скрипт (http://www.fmwconcepts.com/imagemagick/grid/index.php) для ImageMagick.

ferget
08-10-2011, 13:33
создаете новый документ, в меню просмотр-> новая направляющая делаете 4 направляющих

две вертикальные 0см и 1см, две горизонтальные 0см и 1см

в меню просмотр-> Привязать к выбираете все привязки

карандашом обводите квадрат из направляющих, затем с помощью инструмента прямоугольная область обводите нарисованное карандашом

затем редактирование-> определить узор называете как нибудь

открываете ваш рисунок, делаете новый слой, жмете shift+backspace, в использовать: выбираете регулярный, в заказной узор, ваш узор и жмете OK

Iska
08-10-2011, 14:44
vadblm, хорошая ссылка, спасибо.

LilLoco
08-10-2011, 16:38
Всем спасибо, буду делать =)

Не очень понятно, что значит »

ну нужно чтобы в некоторых местах, в сетке была ячейка, например, 30*10, т.е. объединить несколько столбцов в строке нужно. Как - то, вот так :)
Сам еще не понял, что нужно именно :)

vadblm
08-10-2011, 16:52
объединить несколько столбцов в строке нужно. »
Какие столбцы, какие строки? Мы же о картинке говорим, а не о таблице. Какие в изображении столбцы и строки??? Может, вам нужно покромсать картинку на тайлы, которые в свою очередь использовать фоном для ячеек таблицы?
Сам еще не понял, что нужно именно »
Ну уж постарайтесь.

LilLoco
08-10-2011, 17:15
Какие столбцы, какие строки? Мы же о картинке говорим, а не о таблице »
Нужно поверх картинки, "сделать" таблицу( вот в ней то уже и есть столбцы и строки)
Как то вот так :
http://s49.radikal.ru/i126/1110/6f/906f9d4c538a.jpg
Сейчас я сделал это в Word. Но в нем немного сбит масштаб...

Может, вам нужно покромсать картинку на тайлы, которые в свою очередь использовать фоном для ячеек таблицы? »
Этого хотелось бы избежать :)

Iska
08-10-2011, 20:01
LilLoco, то есть, просто нарисовать поверх изображения сетку, так?

По каким принципам, как Вы определяете, какие именно «ячейки» будут «объединены»? Или Вы заранее этого не знаете, и планируете каждый раз, под каждое изображение, проделывать сие «ручками» (поскольку заранее сказать нельзя)?

LilLoco
08-10-2011, 20:03
Iska, да нужно поверх просто наложить.
Расположение объединенных ячеек известно заранее.

Iska
09-10-2011, 07:30
Iska, да нужно поверх просто наложить. »
LilLoco, для ручного метода объединения можно попробовать так:
Option Explicit

Const psPixels = 1
Const psDisplayNoDialogs = 3


Dim strDocument

Dim objPhotoshop
Dim objDocument
Dim objLayerSet

Dim lngPrevRulerUnits
Dim lngPrevDisplayDialogs

Dim i
Dim j
Dim lngStep


Set objPhotoshop = WScript.CreateObject("Photoshop.Application")
objPhotoshop.Visible = True

lngPrevRulerUnits = objPhotoshop.Preferences.RulerUnits
objPhotoshop.Preferences.RulerUnits = psPixels

lngPrevDisplayDialogs = objPhotoshop.DisplayDialogs
objPhotoshop.DisplayDialogs = psDisplayNoDialogs

If objPhotoshop.Documents.Count > 0 Then
Set objDocument = objPhotoshop.ActiveDocument
Else
strDocument = "E:\Песочница\0083\Sample.jpg"

Set objDocument = objPhotoshop.Open(strDocument)
End If

Set objLayerSet = objDocument.LayerSets.Add
objLayerSet.Name = "Сетка"

' Шаг сетки в мм
lngStep = 100 * objDocument.Resolution / 25.4

For i = 0 To objDocument.Width Step lngStep
For j = 0 To objDocument.Height Step lngStep
With objDocument.ArtLayers.Add
.Move objLayerSet, 0
End With

DrawLine objPhotoshop, i, j, i + lngStep, j, 1

With objDocument.ArtLayers.Add
.Move objLayerSet, 0
End With

DrawLine objPhotoshop, i, j, i, j + lngStep, 1
Next
Next

objPhotoshop.Preferences.RulerUnits = lngPrevRulerUnits
objPhotoshop.DisplayDialogs = lngPrevDisplayDialogs

Set objLayerSet = Nothing
Set objDocument = Nothing
Set objPhotoshop = Nothing

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub DrawLine(objApp, x1, y1, x2, y2, width)
Dim objAD_StartPoint
Dim objAD_EndPoint
Dim objAD_Line
Dim objAD_Shape


Set objAD_StartPoint = WScript.CreateObject("Photoshop.ActionDescriptor")
With objAD_StartPoint
.PutUnitDouble objApp.StringIDToTypeID("horizontal"), objApp.StringIDToTypeID("distanceUnit"), x1
.PutUnitDouble objApp.StringIDToTypeID("vertical"), objApp.StringIDToTypeID("distanceUnit"), y1
End With

Set objAD_EndPoint = WScript.CreateObject("Photoshop.ActionDescriptor")
With objAD_EndPoint
.PutUnitDouble objApp.StringIDToTypeID("horizontal"), objApp.StringIDToTypeID("distanceUnit"), x2
.PutUnitDouble objApp.StringIDToTypeID("vertical"), objApp.StringIDToTypeID("distanceUnit"), y2
End With

Set objAD_Line = WScript.CreateObject("Photoshop.ActionDescriptor")
With objAD_Line
.PutObject objApp.StringIDToTypeID("start"), objApp.StringIDToTypeID("paint"), objAD_StartPoint
.PutObject objApp.StringIDToTypeID("end"), objApp.StringIDToTypeID("paint"), objAD_EndPoint
.PutUnitDouble objApp.StringIDToTypeID("width"), objApp.StringIDToTypeID("pixelsUnit"), width
End With

Set objAD_Shape = WScript.CreateObject("Photoshop.ActionDescriptor")
With objAD_Shape
.PutObject objApp.StringIDToTypeID("shape"), objApp.StringIDToTypeID("lineClass"), objAD_Line
.PutBoolean objApp.StringIDToTypeID("antiAlias"), True
End With

objApp.ExecuteAction objApp.StringIDToTypeID("draw"), objAD_Shape, psDisplayNoDialogs

Set objAD_Shape = Nothing
Set objAD_Line = Nothing
Set objAD_EndPoint = Nothing
Set objAD_StartPoint = Nothing
End Sub
'=============================================================================

* работа ведётся с открытым в Photoshop'е документом, при отсутствии такового — с указанным;
* сетка рисуется текущим цветом (просто установите потребный цвет перед запуском скрипта) из горизонтальных и вертикальных линий — рёбер квадратов, каждая линия в отдельном слое (дабы можно было просто удалить слой с линией для объединения двух квадратов);
* сетка рисуется от координаты 0,0 вправо-вниз с шагом:
' Шаг сетки в 100 мм
lngStep = 100 * objDocument.Resolution / 25.4
* по окончании отрисовки не делается никаких действий по сохранению документа, закрытию Photoshop'а.

Я постарался максимально упростить пример. Код проверялся под Photoshop из CS 2 (другого под рукой не нашлось). Вполне возможно, что в новых версиях что-то поменялось и отвалится, что-то можно сделать проще и т.п.
Расположение объединенных ячеек известно заранее. »
Тогда можно попробовать обойтись более простыми средствами (вопрос только в определении соотношения между мм и пикселями в тех форматах, которые не содержат информацию о dpi).

Как думаете указывать, какие квадраты будут являться объединёнными (или отсутствующие рёбра)?

LilLoco
09-10-2011, 11:16
Iska, Спасибо большое!

Как думаете указывать, какие квадраты будут являться объединёнными (или отсутствующие рёбра)? »
Не совсем понял вопроса :(

lngStep = 100 * objDocument.Resolution / 25.4 »
Здесь 25.4 - это, я так понимаю, коэффициент для перевода пиксели в миллиметры? А всегда ли он такой? - Просто ставлю 10 мм шаг, отрисовывается явно ширина не в 10 мм.

Iska
09-10-2011, 16:16
Не совсем понял вопроса »
Я интересуюсь: ежели Вы заранее знаете, какие «ячейки» будут объединёнными — надо придумать какой-то способ указания этих «ячеек» программе. Тогда можно будет выполнять построение сетки полностью автоматизированно.

Здесь 25.4 - это, я так понимаю, коэффициент для перевода пиксели в миллиметры? »
Нет. 25.4 — это количество миллиметров в одном дюйме.
А всегда ли он такой? »
Ага.
Просто ставлю 10 мм шаг, отрисовывается явно ширина не в 10 мм. »
Мы берём заданный шаг, пусть 10 мм. Умножаем его на коэффициент dpi документа (если он не предусмотрен в формате документа, то Photoshop предполагает 72 dpi для документов для печати). Затем делим на 25.4 мм/дюйм. При печати изображения шаг сетки будет составлять 10 мм. То есть, меняя dpi открытого в Photoshop'е документа — Вы управляете физическим размером документа на печати.

LilLoco
10-10-2011, 07:37
надо придумать какой-то способ указания этих «ячеек» программе. Тогда можно будет выполнять построение сетки полностью автоматизированно »
Я думаю можно просто поудалять слои. Это единичный случай, думаю, можно не автоматизировать.

Iska, Спасибо Вам огромное за помощь и разъяснения!

Iska
10-10-2011, 16:39
Я думаю можно просто поудалять слои. Это единичный случай, думаю, можно не автоматизировать. »
Спасибо, ясно.

LilLoco
10-10-2011, 22:04
Спасибо, ясно. »
Это Вам спасибо ;-)




© OSzone.net 2001-2012