ASP には、画像にウォーターマークを追加するためのコンポーネントが必要です。一般的に使用されるソフトウェアには、中国人が開発した aspjpeg ソフトウェアと wsImage ソフトウェアがあります。これらの 2 つのソフトウェアは、結局のところ、中国人が開発した wsImage を使用することをお勧めします。中国語版なので操作も簡単です。 SP には、画像に透かしを追加するためのコンポーネントが必要です。一般的に使用されるソフトウェアには、中国人が開発した aspjpeg ソフトウェアと wsImage ソフトウェアがあります。これらの 2 つのソフトウェアは、結局のところ、中国人が開発した wsImage を使用することをお勧めします。中国語版なので操作は簡単です。
コンポーネントの登録方法:
コマンド プロンプトで regsvr32 [Dll path] と入力するだけです。
画像にウォーターマークを追加することは、画像のサイズを取得してその上にウォーターマークを書き込むこと以外の何ものでもありません。ASP コードは制御コンポーネントとしてのみ機能します。コードを使用してすべてを説明しましょう。
1: 画像サイズを取得します(ここではピクセル値で表されています。PhotoShop を学習している友人は理解しているはずです)
次のようにコードをコピーします。
<%
set obj=server.CreateObject(wsImage.Resize) ''コンポーネントの呼び出し
obj.LoadSoucePic server.mappath(25.jpg) ''画像を開きます。画像名は 25.jpg
obj.GetSourceInfo iWidth,iHeight
response.write 画像の幅: & iWidth & <br> ''画像の幅を取得します
response.write ピクチャの高さ: & iHeight & <br> ''ピクチャの高さを取得します
strError=obj.errorinfo
if strError<> then
応答.write obj.errorinfo
終了する場合
オブジェクトフリー
obj=何も設定しない
%>
''---------------------------------------------- ----------------」
2: テキストの透かしを追加する
次のようにコードをコピーします。
<%
set obj=server.CreateObject(wsImage.Resize)
obj.LoadSoucePic server.mappath(25.jpg) ''画像をロードします
obj.Quality=75
obj.TxtMarkFont = Chinese Caiyun''透かしテキストのフォントを設定します
obj.TxtMarkBond = false ''透かしテキストの太さを設定します
obj.MarkRotate = 0 ''透かしテキストの回転角度
obj.TxtMarkHeight = 25 ''透かしテキストの高さ
obj.AddTxtMark server.mappath(txtMark.jpg)、国外へ連れ出します、&H00FF00&、10、70
strError=obj.errorinfo ''画像名を生成します。テキストの色は画像内の透かしの位置です
if strError<> then
応答.write obj.errorinfo
終了する場合
オブジェクトフリー
obj=何も設定しない
%>
''---------------------------------------------- ----------------」
3: 画像の透かしを追加する
次のようにコードをコピーします。
<%
set obj=server.CreateObject(wsImage.Resize)
obj.LoadSoucePic server.mappath(25.jpg) ''画像をロードします
obj.LoadImgMarkPic server.mappath(blend.bmp) ''ウォーターマーク画像をロードします
obj.Quality=75
obj.AddImgMark サーバー.マップパス(imgMark.jpg)、315、220、&hFFFFFF、70
strError=obj.errorinfo ''画像名を生成します。テキストの色は画像内の透かしの位置です
if strError<> then
応答.write obj.errorinfo
終了する場合
オブジェクトフリー
obj=何も設定しない
%>
''---------------------------------------------- ----------------」
実際、画像に透かしを追加するのはとても簡単です。次に、WsImage.dll コンポーネントの他の 2 つの主な用途について説明します。
写真をトリミングし、写真のサムネイルを生成します。
私はまだコードを使用してコメントを追加することに慣れています。
画像のトリミング:
次のようにコードをコピーします。
<%
set obj=server.CreateObject(wsImage.Resize)
obj.LoadSoucePic サーバー.マップパス(25.jpg)
obj.Quality=75
obj.cropImage server.mappath(25_crop.jpg),100,10,200,200 ''トリミング サイズを定義し、イメージ名を生成します
strError=obj.errorinfo
if strError<> then
応答.write obj.errorinfo
終了する場合
オブジェクトフリー
obj=何も設定しない
%>
詳細な注意事項: WsImage の CropImage メソッドは、画像を生成するときに、左上隅、つまり画像の左側から 100 ピクセルの位置にあるトリミング ポイントであると定義されています。上から 10 ピクセル、最後の 200 は広帯域と高さのトリミングを表します。
''---------------------------------------------- ----------------」
画像のサムネイルを生成します。
次のようにコードをコピーします。
<%
set obj=server.CreateObject(wsImage.Resize)
obj.LoadSoucePic server.mappath(25.jpg) ''画像をロードします
obj.Quality=75
obj.OutputSpic server.mappath(25_s.jpg),0.5,0.5,3 ''サムネイルの名前、つまりサイズを定義します
strError=obj.errorinfo
if strError<> then
応答.write obj.errorinfo
終了する場合
オブジェクトフリー
obj=何も設定しない
%>
詳細な説明:
サムネイルを生成するには 4 つのエクスポート方法があります。
(1) obj.OutputSpic サーバー.マップパス(25_s.jpg),200,150,0
200 が出力幅、150 が出力高さです。この出力形式では出力幅と高さが強制されるため、画像が変形する可能性があります。
(2) obj.OutputSpic サーバー.マップパス(25_s.jpg),200,0,1
出力の幅を 200 とすると、出力の高さは列に合わせて拡大縮小されます。
(3) obj.OutputSpic サーバー.マップパス(25_s.jpg),0,200,2
出力の高さを 200 とすると、出力の幅は列に合わせて拡大縮小されます。
(4) obj.OutputSpic サーバー.マップパス(25_s.jpg),0.5,0.5,3
最初の 0.5 は、生成されるサムネイルの幅が元の画像の半分であること、つまり幅が縮小されることを意味します。
2 番目の 0.5 は、生成されるサムネイルの高さが元の画像の半分であることを意味し、縮小率が高いことを意味します。
幅と高さの縮小率が同じということは、元の画像が縮小されることを意味します。幅と高さの倍率が 1 より大きい場合、元の画像が拡大されます。
2------------------------------------------------- -----------------------------------------------
次のようにコードをコピーします。
<%
Dim ストリーム 1、ストリーム 2、istart、iend、ファイル名
istart=1
vbEnter=Chr(13)&Chr(10)
function getvalue(fstr,foro,paths)'fstr は受信した名前、foro ブール値 false はファイルのアップロード、true は通常のフィールド、path はアップロード ファイルのストレージ パス
もしフォロなら
取得値=
istart=instring(istart,fstr)
istart=istart+len(fstr)+5
iend=instring(istart,vbenter+--------------------------------)
istart>5+len(fstr) の場合
getvalue=substring(istart,iend-istart)
それ以外
取得値=
終了する場合
それ以外
istart=instring(istart,fstr)
istart=istart+len(fstr)+13
iend=instring(istart,vbenter)-1
ファイル名=部分文字列(istart,iend-istart)
filename9=right(getfilename(filename),4)'元のファイルのサフィックスを取得します
ファイル名8=年(now())&月(now())&日(now())&時(now())&分(now())&秒(now())&int(9*10^3*rnd)+10 ^3'ランダムなファイル名を取得します。
'ファイル名を長くしたい場合は、(100*rnd)の100の値を変更してください
filename=replace(getfilename(filename),getfilename(filename),filename8) '元のファイル名を置換し、replace 関数を使用します
filename=filename&filename9 'ファイル接尾辞を追加します。ルールは、生成されたランダムなファイル名に元のファイル接尾辞を追加することです
istart=instring(iend,vbenter+vbenter)+3
iend=instring(istart,vbenter+--------------------------------)
ファイルスタート=iスタート
ファイルサイズ=iend-istart-1
objstream.position=ファイル開始
sf = Server.CreateObject(ADODB.Stream) を設定します。
sf.モード=3
sf.Type=1
SF.オープン
objstream.copyto sf,FileSize
ファイル名<>の場合、
Set rf = Server.CreateObject(Scripting.FileSystemObject)
i=0
fn=ファイル名
while rf.FileExists(server.mappath(paths+fn))
fn=cstr(i)+ファイル名
i=i+1
曲がります
ファイル名=fn
sf.SaveToFile サーバー.マップパス(パス+ファイル名),2
''''''''''''''''''''''''''''''''''''''''
DimJpeg
Jpeg = Server.CreateObject(Persits.Jpeg) を設定します。
-2147221005=エラーの場合
Response.write そのようなコンポーネントはありません。インストールしてください。「AspJpeg コンポーネントがインストールされているかどうかを確認してください。」
Response.End()
終了の場合
Jpeg.Open (server.mappath(paths+filename)) '画像を開く
err.number の場合
Response.write でイメージを開けませんでした。パスを確認してください。
Response.End()
次の場合に終了
ディムああ
aa=Jpeg.Binary 'オリジナルデータをaaに代入
'==========テキスト透かしを追加==================
Jpeg.Canvas.Font.Color = &Hff0000 '透かしのテキストの色
Jpeg.Canvas.Font.Family = Arial' フォント
Jpeg.Canvas.Font.Bold = True '太字にするかどうか
Jpeg.Canvas.Font.Size = 30' フォント サイズ
Jpeg.Canvas.Font.ShadowColor = &H000000 '影の色
Jpeg.Canvas.Font.ShadowYOffset = 1
Jpeg.Canvas.Font.ShadowXOffset = 1
Jpeg.Canvas.Brush.Solid = True
Jpeg.Canvas.Font.Quality = 4 '出力品質
Jpeg.Canvas.PrintText Jpeg.OriginalWidth/2-100,Jpeg.OriginalHeight/2+20,www.my9933.com '透かしの位置とテキスト
bb=Jpeg.Binary 'bbにはテキストウォーターマーク処理後の値を代入します。このときテキストウォーターマークには不透明度がありません。
'============テキストの透明度を調整================
MyJpeg = Server.CreateObject(Persits.Jpeg) を設定します。
MyJpeg.OpenBinary aa
ロゴ = Server.CreateObject(Persits.Jpeg) を設定します。
Logo.OpenBinarybb
MyJpeg.DrawImage 0,0、ロゴ、0.2 '0.3 は透明度です
cc=MyJpeg.Binary '最終結果を cc に代入します。このとき、ターゲット画像も生成できます。
response.BinaryWrite cc 'ブラウザにバイナリを出力します
MyJpeg.Save (server.mappath(パス+ファイル名))
aa=何も設定しない
setbb=何もしない
setcc=何もなし
JPEG.閉じる
MyJpeg.Close
ロゴ.閉じる
''''''''''''''''''''''''''''''''''''''''''
終了する場合
取得値=ファイル名
終了する場合
終了関数
関数 subString(theStart,theLen)
ディミ、C、ステンプ
objStream.Position=theStart-1
ステンプ=
for i=1 から theLen
objStream.EOS の場合は終了します
c=ascB(objStream.Read(1))
c > 127 の場合
objStream.EOS の場合は終了します
stemp=stemp&Chr(AscW(ChrB(AscB(objStream.Read(1)))&ChrB(c)))
i=i+1
それ以外
stemp=stemp&Chr(c)
終了の場合
次
サブ文字列=温度
終了機能
関数 inString(theStart,varStr)
薄暗い i、j、bt、theLen、str
文字列=0
Str=toByte(varStr)
theLen=LenB(Str)
for i=theStart から objStream.Size-theLen
if i>objstream.size then exit 関数
objstream.Position=i-1
if AscB(objstream.Read(1))=AscB(midB(Str,1))
InString=i
j=2 の場合は theLen へ
objstream.EOS の場合
inString=0
終了
終了する場合
if AscB(objstream.Read(1))<>AscB(MidB(Str,j,1)) then
文字列=0
出口
終了する場合
次
if InString<>0 then 関数を終了
終了する場合
次
終了機能
プライベート関数 GetFileName(FullPath)
フルパス <> の場合
GetFileName = Mid(FullPath,InStrRev(FullPath, /)+1)
それ以外
GetFileName =
終了の場合
終了機能
toByte(Str)関数
ディム i、iCode、c、iLow、iHigh
toByte=
i=1 の場合、Len(Str) まで
c=mid(Str,i,1)
iCode =Asc(c)
iCode<0 の場合、iCode = iCode + 65535
iCode > 255 の場合
iLow = Left(Hex(Asc(c)),2)
iHigh =Right(Hex(Asc(c)),2)
toByte = toByte & chrB(&H&iLow) & chrB(&H&iHigh)
それ以外
toByte = toByte & chrB(AscB(c))
終了の場合
次
終了機能
%>
3------------------------------------------------- -----------------------------------------------
ASP コンポーネント Persits.Jpeg を使用して画像に透かしを追加し、サムネイルを生成します
次のようにコードをコピーします。
<%
ファイル名=1.jpg
Jpeg = Server.CreateObject(Persits.Jpeg) を設定します。
' ソース画像のパスを取得します
パス = Server.MapPath(ファイル名)
'ソース画像を開く
'response.write(パス)
Jpeg.オープンパス
' サムネイル生成の詳細を設定します。設定方法はいくつかありますが、まずアスペクト比を決定してから、それに比例して拡大縮小する方法があります。
Jpeg.OriginalWidth / Jpeg.OriginalHeight > 1 の場合
JPEG.幅 = 98
Jpeg.Height = int((98/Jpeg.OriginalWidth)*Jpeg.OriginalHeight)
elseif Jpeg.OriginalWidth / Jpeg.OriginalHeight < 1 then
JPEG.幅 = 98
Jpeg.Height= int((98/Jpeg.OriginalWidth)*Jpeg.Height)
終了する場合
'シャープ効果を設定する
Jpeg.シャープ 1、130
' 指定されたパスにサムネイルを生成します
Response.Write Server.MapPath(.)
Jpeg.Save Server.MapPath(.)&/small/&ファイル名
'response.write ファイル名 1
'response.write Server.MapPath(uploadpic/small)&/&filename1
' この 2 つのセッションに注目してください
'セッション(PPP0)=GP_curPath&ファイル名
'セッション(PPP1)=GP_curPath&small&ファイル名
Jpeg = なしを設定
'サムネイル画像を自動生成して終了
'大きな画像に透かしを入れ始めます
'インスタンスを作成する
Jpeg = Server.CreateObject(Persits.Jpeg) を設定します。
'対象の画像を開く
パス = Server.MapPath(ファイル名)
'ソース画像を開く
Jpeg.オープンパス
'テキストの透かしを追加
Jpeg.Canvas.Font.Color = &HFF0000' 赤
Jpeg.Canvas.Font.Family = 宋代
Jpeg.Canvas.Font.Bold = True
Jpeg.Canvas.Print 10、10、Honglan テクノロジー
'ファイルを保存
Jpeg.Save Server.MapPath(.)&/small/w_&ファイル名
'オブジェクトの登録を解除します
Jpeg = なしを設定
'大きな画像の透かしは終了します
%>
4------------------------------------------------- -----------------------------------------------
ASPJPEG を使用して透かし入りの ASP 実装コードを構築する
次のようにコードをコピーします。
<%
クラスqswhImg
ほのぼの麻生
プライベートサブクラス_初期化
set aso=CreateObject(Adodb.Stream)
aso.モード=3
aso.Type=1
aso.開く
エンドサブ
プライベートサブクラス_Terminate
aso=何も設定しない
エンドサブ
プライベート関数 Bin2Str(Bin)
ディム I、ストラ
I=1 の場合 LenB(Bin)
clow=MidB(Bin,I,1)
ASCB(クロウ)<128 の場合
Str = Str & Chr(ASCB(クロウ))
それ以外
I=I+1
I <= LenB(Bin) の場合、Str = Str & Chr(ASCW(MidB(Bin,I,1)&clow))
終了する場合
次
Bin2Str = Str
終了機能
プライベート関数 Num2Str(num,base,lens)
「秋水烏編」 (2002-8-12)
薄暗い
レット =
while(数値>=ベース)
ret = (数値 mod ベース) & ret
数値 = (数値 - 数値 mod ベース)/ベース
曲がります
Num2Str = right(string(lens,0) & num & ret,lens)
終了機能
プライベート関数 Str2Num(str,base)
「秋水烏編」 (2002-8-12)
薄暗い
ret = 0
i=1 から len(str) まで
ret = ret *base + cint(mid(str,i,1))
次
Str2Num=ret
終了機能
プライベート関数 BinVal(bin)
「秋水烏編」 (2002-8-12)
薄暗い
ret = 0
i = lenb(bin) から 1 ステップ -1 の場合
ret = ret *256 + ascb(midb(bin,i,1))
次
BinVal=ret
終了機能
プライベート関数 BinVal2(bin)
「秋水烏編」 (2002-8-12)
薄暗い
ret = 0
i = 1 から lenb(bin) まで
ret = ret *256 + ascb(midb(bin,i,1))
次
BinVal2=ret
終了機能
関数 getImageSize(filespec)
「秋水烏編」 (2002-9-3)
薄暗い(3)
aso.LoadFromFile(ファイルスペック)
bFlag=aso.read(3)
select case hex(binVal(bFlag))
ケース4E5089:
aso.read(15)
ret(0)=PNG
ret(1)=BinVal2(aso.read(2))
aso.read(2)
ret(2)=BinVal2(aso.read(2))
ケース 464947:
aso.read(3)
ret(0)=GIF
ret(1)=BinVal(aso.read(2))
ret(2)=BinVal(aso.read(2))
ケース 535746:
aso.read(5)
binData=aso.Read(1)
sConv=Num2Str(ascb(binData),2,8)
nBits=Str2Num(left(sConv,5),2)
sConv=mid(sConv,6)
while(len(sConv)<nBits*4)
binData=aso.Read(1)
sConv=sConv&Num2Str(ascb(binData),2,8)
曲がります
ret(0)=SWF
ret(1)=int(abs(Str2Num(mid(sConv,1*nBits+1,nBits),2)-Str2Num(mid(sConv,0*nBits+1,nBits),2))/20)
ret(2)=int(abs(Str2Num(mid(sConv,3*nBits+1,nBits),2)-Str2Num(mid(sConv,2*nBits+1,nBits),2))/20)
ケースFFD8FF:
する
do: p1=binVal(aso.Read(1)): p1=255 で、aso.EOS ではない間にループします。
p1>191 かつ p1<196 の場合、終了します。else を実行します aso.read(binval2(aso.Read(2))-2)
do:p1=binVal(aso.Read(1)):p1<255 かつ aso.EOS ではない場合のループ
trueの間ループする
aso.Read(3)
ret(0)=JPG
ret(2)=binval2(aso.Read(2))
ret(1)=binval2(aso.Read(2))
それ以外の場合:
if left(Bin2Str(bFlag),2)=BM then
aso.Read(15)
ret(0)=BMP
ret(1)=binval(aso.Read(4))
ret(2)=binval(aso.Read(4))
それ以外
ret(0)=
終了する場合
エンドセレクト
ret(3)=幅= & ret(1) & 高さ= & ret(2) &
getimagesize=ret
終了機能
終了クラス
SavefullPath=326151745wldn.jpg 'ピクチャ パスの割り当てまたはピクチャ パス変数の割り当て
'画像の幅を取得する
qswh = 新しい qswhImg を設定します
arr = qswh.getImageSize(Server.Mappath(SavefullPath))
qswh = なしを設定します
str_ImgWidth=arr(1)
str_ImgHeight=arr(2)
Int(str_ImgWidth) > 600 の場合
str_ImgWidth = 600
それ以外
str_ImgWidth = str_ImgWidth
終了の場合
'透かしを追加
Int(str_ImgWidth) > 300 かつ Int(str_ImgHeight) > 100 の場合
LocalFile=Server.MapPath(SavefullPath)
TargetFile=Server.MapPath(SavefullPath)
DimJpeg
Jpeg = Server.CreateObject(Persits.Jpeg) を設定します。
-2147221005=エラーの場合
Response.Write(<script language='javascript'>alert('このコンポーネントは存在しません。インストールしてください!');history.back();</script>) 'AspJpeg コンポーネントがインストールされているかどうかを確認します
Response.End()
終了の場合
Jpeg.Open (LocalFile) '画像を開く
err.number の場合
Response.Write(<script language='javascript'>alert('画像を開けませんでした。パスを確認してください!');history.back();</script>)
Response.End()
次の場合に終了
ディムああ
aa=Jpeg.Binary 'オリジナルデータをaaに代入
'==========テキスト透かしを追加==================
Jpeg.Canvas.Font.Color = &Hfffffff '透かしのテキストの色
Jpeg.Canvas.Font.Family = Arial 'フォント
Jpeg.Canvas.Font.Bold = True '太字にするかどうか
Jpeg.Canvas.Font.Size = 20 'フォント サイズ
Jpeg.Canvas.Font.ShadowColor = &H000000 '影の色
Jpeg.Canvas.Font.ShadowYOffset = 1
Jpeg.Canvas.Font.ShadowXOffset = 1
Jpeg.Canvas.Brush.Solid = True
Jpeg.Canvas.Font.Quality = 10 ' '出力品質
Jpeg.Canvas.PrintText Jpeg.OriginalWidth/2-40,Jpeg.OriginalHeight/2-10、Webサイト構築の透かし位置とテキスト
bb=Jpeg.Binary 'bbにはテキストウォーターマーク処理後の値を代入します。このときテキストウォーターマークには不透明度がありません。
'============テキストの透明度を調整================
MyJpeg = Server.CreateObject(Persits.Jpeg) を設定します。
MyJpeg.OpenBinary aa
ロゴ = Server.CreateObject(Persits.Jpeg) を設定します。
Logo.OpenBinarybb
MyJpeg.DrawImage 0,0、ロゴ、0.5 '0.3 は透明度です
cc=MyJpeg.Binary '最終結果を cc に代入します。このとき、ターゲット画像も生成できます。
Response.BinaryWrite cc 'ブラウザにバイナリを出力
MyJpeg.Save (ターゲットファイル)
aa = 何も設定しない
setbb=何もしない
setcc=何もなし
Jpeg.閉じる
MyJpeg.Close
ロゴ.閉じる
終了の場合
'透かしを追加
%>