首页
\
问答
\
为什么生成的水印图像比原始图像大得多?(Why's the generated watermarked image is much more bigger than the original image?)
为什么生成的水印图像比原始图像大得多?(Why's the generated watermarked image is much more bigger than the original image?)
我使用下面的代码生成水印图像,问题是,即使生成的文件的尺寸较小,生成的文件总是比原始文件更大,例如:
original.jpg(1920 * 1440)= 1.11 MB
generated.jpg(960 * 720)= 1.77 MB
我错过了什么吗?
C# :
private void AddWaterMark(string target, string NewName, string newwidth, string newheight) { Image imgToResize = Image.FromFile(Path.Combine(target, NewName)); Bitmap indexedImage = new Bitmap(imgToResize, newwidth, newheight); Graphics g = Graphics.FromImage(indexedImage); g.DrawImage(indexedImage, new Rectangle(0, 0, newwidth, newheight), 0, 0, indexedImage.Width, indexedImage.Height, GraphicsUnit.Pixel); g.RotateTransform(-35); g.DrawString("WWW.example.COM", new Font("Verdana", 24, FontStyle.Bold), new SolidBrush(Color.FromArgb(75, 255, 255, 255)), -100, 350); imgToResize.Dispose(); indexedImage.Save(target + "\\" + NewName); indexedImage.Dispose(); g.Dispose(); }
VB:
Private Sub AddWaterMark(target As String, NewName As String, newwidth As String, newheight As String) Dim imgToResize As Image = Image.FromFile(Path.Combine(target, NewName)) Dim indexedImage As New Bitmap(imgToResize, newwidth, newheight) Dim g As Graphics = Graphics.FromImage(indexedImage) g.DrawImage(indexedImage, New Rectangle(0, 0, newwidth, newheight), 0, 0, indexedImage.Width, indexedImage.Height, GraphicsUnit.Pixel) g.RotateTransform(-35) g.DrawString("WWW.example.COM", New Font("Verdana", 24, FontStyle.Bold), New SolidBrush(Color.FromArgb(75, 255, 255, 255)), -100, 350) imgToResize.Dispose() indexedImage.Save(target + "\" + NewName) indexedImage.Dispose() g.Dispose() End Sub
I am using the code below to generate a watermarked image, The problem is, the genrated file is always more bigger than the original file even if the dimensions of the generated file are smaller, for example:
original.jpg (1920 * 1440) = 1.11 MB
generated.jpg (960 * 720) = 1.77 MB
Am I missing something?
C# :
private void AddWaterMark(string target, string NewName, string newwidth, string newheight) { Image imgToResize = Image.FromFile(Path.Combine(target, NewName)); Bitmap indexedImage = new Bitmap(imgToResize, newwidth, newheight); Graphics g = Graphics.FromImage(indexedImage); g.DrawImage(indexedImage, new Rectangle(0, 0, newwidth, newheight), 0, 0, indexedImage.Width, indexedImage.Height, GraphicsUnit.Pixel); g.RotateTransform(-35); g.DrawString("WWW.example.COM", new Font("Verdana", 24, FontStyle.Bold), new SolidBrush(Color.FromArgb(75, 255, 255, 255)), -100, 350); imgToResize.Dispose(); indexedImage.Save(target + "\\" + NewName); indexedImage.Dispose(); g.Dispose(); }
VB:
Private Sub AddWaterMark(target As String, NewName As String, newwidth As String, newheight As String) Dim imgToResize As Image = Image.FromFile(Path.Combine(target, NewName)) Dim indexedImage As New Bitmap(imgToResize, newwidth, newheight) Dim g As Graphics = Graphics.FromImage(indexedImage) g.DrawImage(indexedImage, New Rectangle(0, 0, newwidth, newheight), 0, 0, indexedImage.Width, indexedImage.Height, GraphicsUnit.Pixel) g.RotateTransform(-35) g.DrawString("WWW.example.COM", New Font("Verdana", 24, FontStyle.Bold), New SolidBrush(Color.FromArgb(75, 255, 255, 255)), -100, 350) imgToResize.Dispose() indexedImage.Save(target + "\" + NewName) indexedImage.Dispose() g.Dispose() End Sub
原文:
更新时间:2021-10-25 10:10
相关问答
更多-
我没有看到在Angular和jsPlumb之间建立双向数据绑定的简单方法。 我最终在我的项目上做的是创建一个自定义的Angular服务,它作为控制器和jsPlumb之间的桥梁。 此类服务包含特定于应用程序的方法,例如: removeElementFromFlow addElement方法 的getElements getConnections isElementConnected 等等 它允许将所有jsPlumb管道代码保存在控制器外部,保持其清洁。 I don't see an easy way to e ...
-
从现有的JavaScript代码创建angularjs应用程序(Creating an angularjs app from existing javascript code)[2023-03-28]
正如Shomz和Huafu已经解释的那样,您应该将代码放入angularjs服务中。 创建包含所有代码的服务。 但我认为您可能需要更改功能的名称。 仅作为示例,您的代码的一部分: app.service('taxService', function () { function taxCalculation(configuration) { this.superAnnuationPercentage = configuration.superAnnuationPercentage; this ... -
让我们先把术语对齐 - 这可能会简化一些事情。 就控制器而言, 工厂和服务是相同的。 唯一的区别在于它们的创建,但这是在它们被注入控制器之前发生的。 模块就像包或功能容器。 因此,就这个问题而言,它们并不重要。 模型是表示后端数据层的数据(和相关功能)的对象。 ViewModel是View使用和修改的对象。 这就是您所说的“范围就绪”。 控制器负责处理来自View的调用(例如ng-click )以及用于在模型和ViewModel之间封送数据(通常通过服务)。 保持控制器尽可能精益是一种很好的做法。 所以这就 ...
-
如何在ajaxified partials中使用javascript函数?(How to use javascript functions within ajaxified partials?)[2022-06-05]
我认为你应该使用jQuery.on()方法。 例如 $("#content").on("click", "input[type='checkbox']", function(event){ // do some stuff }); Seems this question has been asked before, but I was not using the correct search terms. In case anyone else stumbles across this, the an ... -
带有AngularJS的JavaScript中的Windows Phone应用程序(Windows Phone App in JavaScript with AngularJS)[2022-04-20]
微软开放技术公司最近发布了一个shim,它可以避免使用AngularJS的Windows商店应用程序以及许多其他流行的JavaScript库的确切问题。 只需从GitHub下载JavaScript Dynamic Content shim ,然后在运行任何其他脚本之前将文件引用到应用程序的开头。 您不应再看到动态内容错误。 让我知道这是否解决了您的问题! Microsoft Open Technologies recently released a shim which will prevent this ... -
从Angularjs App中的iOS Webview调用Javascript函数(Call Javascript Function From iOS Webview in Angularjs App)[2023-01-28]
这是因为您的testing功能不是全局可用的。 它仅在您的Testing控制器功能中可用。 要使其全局可用,您需要将控制器修改为如下所示: 'use strict'; angular.module('testing.controllers', []) .controller('Testing', function($scope) { window.testing = function() { alert('testing'); } }); 不能说我建议你这样做,但很 ... -
由于Google API请求的异步性质,您始终首先打印“测试”字符串(您在执行$log.info("testing");行后获得响应)。 获得所需结果的一种方法是使用$q服务: // need to inject the $q service $scope.isRegistered = function () { var joe = function () { var deferred = $q.defer(); gapi .client .conference ...
-
AngularJs和Javascript嵌套函数及其调用(AngularJs & Javascript nested functions & their invocation)[2022-11-27]
(Q1.1)右 - 两个args,一个带有过滤器名称的字符串...... (Q2 / 3) filter的第二个参数(arg2)是构造函数(或“工厂”)函数。 它仅在创建过滤器时执行一次。 构造函数必须返回一个函数。 返回的函数将在使用与其关联的过滤器时执行。 换句话说,返回的函数是注入(使用$ injector)到过滤器的函数( http://docs.angularjs.org/api/ng。$ filterProvider) 我在下面添加了评论,详细说明了这一点: angular.filter('re ... -
您可以使用注入任何需要此功能的控制器的服务。 但是,如果您更喜欢在$rootScope上定义函数,则可以执行以下操作: app.run(function ($rootScope) { $rootScope.add = function (a, b) { return a + b; } }); 然后你可以在控制器中简单地使用这个功能 app.controller('Ctrl', function($scope) { $scope.mySum = $scope.add( ...
-
readAsBinaryString已被弃用,您应该使用readAsArrayBuffer 。 无论采用哪种方式,这些函数都会启动一个异步操作,其结果是您在FileReader实例的load事件中读取的结果。 var reader = new FileReader(); reader.onload = function(){ controller.fileHash = CryptoJS.SHA256(reader.result).toString(CryptoJS.enc.Hex); }; re ...