CDK怎么根据结构式生成图片?
这个是依赖:
网上的教程给的方法无法实现,有没有厉害的朋友帮我看看
方法找不到,jar包里面也没有相关内容
这里是代码里面的实现方法
但是项目比较老了,这两个依赖也找不到了
还是得自己揪头发才有用,可以用indigo来实现,springBoot里面的依赖加入不进来,只能引入外部jar。来实现化学结构式转图片
对不起,我无法直接提供CDK根据结构式生成图片的详细步骤,因为这涉及到复杂的图形和化学信息处理技术。不过,我可以告诉你CDK(Open Science CDK)是一个很好的工具,它可以进行化学结构的解析和渲染。
以下是一个一般化的流程,你可以根据CDK的官方文档和教程进行更深入的了解:
ChemicalViewer
或 DefaultChemObjectViewer
类,将IAtom对象转换成图像。在实现这一流程的过程中,你可能需要深入了解CDK的API、化学结构表示、图形渲染等相关知识。如果需要更多信息,建议访问Open Science CDK的官方网站,查看其文档和教程。
查一下这个依赖是什么版本的。
【以下回答由 GPT 生成】
问题标题: 在Java中,如何使用CDK库根据给定的结构式生成图片?
问题标签: java, CDK
问题内容: 我想使用CDK库在Java中生成图片,但是网上的教程提供的方法无法实现。请问有没有人能帮我看看这个问题?
以下是相关细节:
依赖关系: 请提供CDK的版本和其他相关依赖的信息。
CDK版本:
其他依赖:
代码实现方法: 请提供你当前尝试的代码实现方法。
java // 在这里粘贴你的代码
问题详情: 你提到项目比较老,导致两个依赖也找不到了。请提供更多关于这两个依赖的信息,或者解决问题的其他尝试。
缺失的依赖1:
希望以上信息能帮助到你更好地理解我的问题。
【相关推荐】
结合GPT给出回答如下请题主参考
CDK可以根据给定的结构式生成相应的分子结构图片。以下是使用CDK生成分子结构图片的简单示例代码:
// 导入所需的包
import org.openscience.cdk.interfaces.IMolecule;
import org.openscience.cdk.exception.CDKException;
import org.openscience.cdk.smiles.SmilesParser;
import org.openscience.cdk.tools.manipulator.MoleculeTools;
// 定义结构式
String smiles = "CC(=O)O";
// 将结构式转换为分子对象
IMolecule molecule = null;
try {
SmilesParser parser = new SmilesParser();
molecule = parser.parseSmiles(smiles);
} catch (CDKException e) {
e.printStackTrace();
}
// 可选:如果结构式中没有显式指定氢原子,则需要加上氢原子
MoleculeTools.convertImplicitToExplicitHydrogens(molecule);
// 导入所需的包
import org.openscience.cdk.renderer.generators.IGenerator;
import org.openscience.cdk.renderer.generators.BasicSceneGenerator;
import org.openscience.cdk.renderer.generators.HighlightAtomGenerator;
import org.openscience.cdk.renderer.generators.HighlightBondGenerator;
import org.openscience.cdk.renderer.generators.HighlightGenerator;
import org.openscience.cdk.renderer.generators.IGeneratorParameter;
import org.openscience.cdk.renderer.generators.parameter.HighlightColor;
import org.openscience.cdk.renderer.generators.BasicAtomGenerator;
import org.openscience.cdk.renderer.generators.BasicBondGenerator;
import org.openscience.cdk.renderer.generators.BasicGeneratorSet;
import org.openscience.cdk.renderer.RendererModel;
import org.openscience.cdk.renderer.Renderer;
import java.awt.Dimension;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.ArrayList;
import java.util.List;
// 定义生成器列表和相关参数
List<IGenerator<IGeneratorParameter>> generators = new ArrayList<IGenerator<IGeneratorParameter>>();
generators.add(new BasicSceneGenerator());
generators.add(new HighlightAtomGenerator());
generators.add(new HighlightBondGenerator());
generators.add(new HighlightGenerator());
generators.add(new BasicAtomGenerator());
generators.add(new BasicBondGenerator());
IGeneratorParameter highlightColor = HighlightColor.class.cast((new HighlightColor()).getDefault());
generators.get(1).getParameters().get(highlightColor.getClass()).setValue(highlightColor);
// 设置渲染器参数
RendererModel rendererModel = new RendererModel();
rendererModel.set(BasicGeneratorSet.class, generators);
// 创建渲染器和画布
Renderer renderer = new Renderer(rendererModel);
Dimension drawArea = new Dimension(200, 200);
BufferedImage image = new BufferedImage(drawArea.width, drawArea.height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = image.createGraphics();
g2.setBackground(Color.WHITE);
g2.clearRect(0, 0, drawArea.width, drawArea.height);
// 渲染分子结构,并输出结果图片
renderer.paint(molecule, new AWTDrawVisitor(g2), drawArea, true);
这样,生成的分子结构图片就会以BufferedImage的形式存储在image对象中了。你只需要将image对象写入到文件中或者在GUI中显示出来即可。
重新写
将CDK库添加到你的Java项目
创建一个Java类,导入CDK库的相关类,例如org.openscience.cdk.interfaces.IChemObjectBuilder和org.openscience.cdk.sdg.SugarStructure。
使用CDK来创建一个分子对象,你可以通过解析SMILES字符串或手动添加原子和键来构建分子结构。这里以解析SMILES字符串为例:
IChemObjectBuilder builder = SilentChemObjectBuilder.getInstance();
String smiles = "CCO"; // 举例一个SMILES字符串
IAtomContainer molecule = org.openscience.cdk.smiles.SmilesParser.parseSmiles(smiles, builder);
创建一个SugarStructure对象,并将分子添加到其中:
SugarStructure sugar = new SugarStructure();
sugar.addMolecule(molecule);
为了生成分子的图片,你可以使用CDK的DepictionGenerator类:
DepictionGenerator generator = new DepictionGenerator();
generator.depict(sugar);
最后,你可以将生成的图片保存为文件或将其显示在Java应用程序的GUI中。示例代码:
File outputFile = new File("molecule.png");
ImageIO.write(sugar.getImage(), "PNG", outputFile);
这应该可以帮到你
还没导入依赖吧,你重新Maven一下
结合GPT给出回答如下请题主参考
使用CDK生成化学结构图片的步骤如下:
<dependency>
<groupId>org.openscience.cdk</groupId>
<artifactId>cdk-core</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>org.openscience.cdk</groupId>
<artifactId>cdk-io</artifactId>
<version>2.3</version>
</dependency>
SmilesParser
对象,使用SMILES字符串来表示化合物的结构:SmilesParser parser = new SmilesParser(DefaultChemObjectBuilder.getInstance());
String smiles = "CC(C)C1CC=C(C(C)C)C(C)(C)C1";
IAtomContainer molecule = parser.parseSmiles(smiles);
Canvas
对象,设置画布大小和分辨率:Canvas canvas = new Canvas(400, 400);
canvas.setZoom(1.0);
StructureDiagramGenerator
对象,将分子转换为有机分子的二维平面结构:StructureDiagramGenerator sdg = new StructureDiagramGenerator();
sdg.setMolecule(molecule);
sdg.generateCoordinates();
IAtomContainer molecule2D = sdg.getMolecule();
AtomContainerRenderer renderer = new AtomContainerRenderer();
renderer.setup(molecule2D, canvas);
renderer.setRenderer2DModel(new BasicSceneGenerator());
renderer.paint(canvas, new AWTDrawVisitor(canvas.getGraphics()));
BufferedImage image = canvas.getImage();
File output = new File("molecule.png");
ImageIO.write(image, "png", output);
完整的代码示例:
import java.awt.image.BufferedImage;
import java.io.File;
import javax.imageio.ImageIO;
import org.openscience.cdk.DefaultChemObjectBuilder;
import org.openscience.cdk.interfaces.IAtomContainer;
import org.openscience.cdk.io.SMILESReader;
import org.openscience.cdk.renderer.AtomContainerRenderer;
import org.openscience.cdk.renderer.generators.BasicSceneGenerator;
import org.openscience.cdk.renderer.visitor.AWTDrawVisitor;
import org.openscience.cdk.smiles.smarts.SMARTSQueryTool;
import org.openscience.cdk.structgen.deterministic.StructureDiagramGenerator;
import org.openscience.cdk.tools.manipulator.AtomContainerManipulator;
import org.openscience.cdk.tools.manipulator.ChemModelManipulator;
import org.openscience.cdk.tools.manipulator.ReactionManipulator;
import org.openscience.cdk.tools.manipulator.ReactionSetManipulator;
import org.openscience.cdk.tools.manipulator.RingSetManipulator;
public class CDKStructureImageExample {
public static void main(String[] args) throws Exception {
// Parse SMILES string
SmilesParser parser = new SmilesParser(DefaultChemObjectBuilder.getInstance());
String smiles = "CC(C)C1CC=C(C(C)C)C(C)(C)C1";
IAtomContainer molecule = parser.parseSmiles(smiles);
// Generate 2D structure
StructureDiagramGenerator sdg = new StructureDiagramGenerator();
sdg.setMolecule(molecule);
sdg.generateCoordinates();
IAtomContainer molecule2D = sdg.getMolecule();
// Create canvas
Canvas canvas = new Canvas(400, 400);
canvas.setZoom(1.0);
// Render molecule on canvas
AtomContainerRenderer renderer = new AtomContainerRenderer();
renderer.setup(molecule2D, canvas);
renderer.setRenderer2DModel(new BasicSceneGenerator());
renderer.paint(canvas, new AWTDrawVisitor(canvas.getGraphics()));
// Save canvas as image
BufferedImage image = canvas.getImage();
File output = new File("molecule.png");
ImageIO.write(image, "png", output);
}
}